我有一個腳本來每次重新啟動時啟動我的世界伺服器。我可以在日誌中看到它正在調用 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
現代安裝的路徑中。