腳本在 crontab 中不起作用

腳本在 crontab 中不起作用

我有一個腳本來每次重新啟動時啟動我的世界伺服器。我可以在日誌中看到它正在調用 cmd,但沒有打開任何螢幕。如果我手動運行腳本,/home/minecraft/scripts/startMinecraft.sh它會完美運行。

這是我的 crontab:

@reboot /home/minecraft/scripts/startMinecraft.sh
38 00,06,12,16 * * * /home/minecraft/scripts/backup.sh

這是一台centos 6伺服器。

這是我的startMinecraft.sh腳本。

screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh

正如我之前所說,如果我手動運行該行,它會完美運行。

答案1

您可能需要設定二進位檔案的完整路徑,screen因為當 cron 作業執行時,它不會像使用者透過終端機或 SSH 登入時那樣設定 $PATH 值。Stack Overflow 上的這個答案是對整個交易的一個很好的解釋。

所以我建議你改變你的腳本:

screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh

對此:

/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh

並替換/path/to/screen為您可以輕鬆獲得的實際完整路徑which像這樣:

which screen

輸出將類似:

/usr/bin/screen

或者,您可以透過將 $PATH 實際放置在腳本中來設定它,如下所示:

PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

當然,這應該與您系統上的實際 PATH 值相匹配,您可以透過輸入以下內容來獲取該值:

echo $PATH

但我個人更喜歡 fullpath 方法,因為它對我來說更乾淨,而且 $PATH 值經常變化,因此您不希望在 Bash 腳本中出現各種值的混合。

PS:另外,這是一件小事,但您的 Bash 腳本應該在“舍邦”像這樣在頂部,所以你的腳本看起來像這樣:

#!/bin/bash
/path/to/screen -A -m -d -S minecraftserver /home/minecraft/scripts/startServer.sh

當然,這/bin/bash應該透過運行來匹配您系統的實際 Bash 路徑which bash,但我懷疑它不會位於/bin/bash現代安裝的路徑中。

相關內容