如果之前有人問過這個問題,我深表歉意,但我不知道如何對此搜尋查詢提出疑問。我對 Linux 非常陌生,我一直在解決問題的過程中學習。
我正在嘗試設定工作 cron 作業來重新啟動我正在運行的遊戲伺服器。
目前我的 crontab 看起來像這樣
#backup world as instructed by https://github.com/g1franc/SEDS-Setup
0 0 * * * /home/root/spaceengineers/start.sh backupworld
#close server
1 0 * * * /usr/bin/screen -S spaceengineers -X stuff "^C"
#close screen
2 0 * * * /usr/bin/screen -S spaceengineers -X stuff "^M"
#recreate server
3 0 * * * /home/root/spaceengineers/start.sh
現在在備份世界中,我在位於我的系統日誌檔案中/var/log
找到
May 24 00:00:01 SpaceEngineers CRON[1958]: (root) CMD (/home/root/spaceengineers/start.sh backupworld)
May 24 00:00:01 SpaceEngineers CRON[1957]: (CRON) info (No MTA installed, discarding output)
重建伺服器也是如此
May 24 00:03:01 SpaceEngineers CRON[2269]: (root) CMD (/home/root/spaceengineers/start.sh /usr/bin/screen -x spaceengineers)
May 24 00:03:01 SpaceEngineers CRON[2268]: (CRON) info (No MTA installed, discarding output)
其他命令工作得很好。
現在,在有人質疑為什麼我按照我的方式構建程式碼之前,這是因為我遵循的教程說要通過啟動伺服器,~/spaceengineers/start.sh -x spaceengineers
並且從我讀到的內容來看,我需要執行/usr/bin/screen 來訪問中的任何螢幕命令克朗
我做錯了什麼以及我需要做什麼來糾正我的問題。
編輯:更改了 crontab 以匹配我的伺服器上的當前內容,問題保持不變
start.sh 的 Pastebin
答案1
你能檢查一下這一行的 GNU 螢幕語法嗎:
3 0 * * * /home/root/spaceengineers/start.sh /usr/bin/screen -x spaceengineers
我本來期望的是這樣的:
3 0 * * * /usr/bin/screen -S spaceengineers -X stuff 'command with newline'
但是,使用該-X
方法screen
需要執行螢幕命令而不是腳本。
因此,您需要screen
stuff
按照此使用命令蘇問題
screen -S sessionname -X stuff 'command'`echo -ne '\015'`
更新
嘗試/bin/bash
或 無論您使用的 Shell 位於何處。
3 0 * * * /bin/bash /home/root/spaceengineers/start.sh
也許添加內容以start.sh
幫助調試。
可以透過命令找到shell which
。可能必須sudo
或是 root 才能找到答案。
答案2
這個命令對我有用,但因為我的腳本中的一個或多個命令需要 sudo,所以我必須在 root 用戶的 cron 下設定它:
17 2 29 1 * /usr/bin/screen -dmS $MYSESSIONNAME /bin/bash $FULLPATHTOMYSHELLSCRIPT $SHELLSCRIPTARG1 $SHELLSCRIPTARG2 ...
讓螢幕正常工作(而不僅僅是在 cron 呼叫時立即關閉)的關鍵是參數-d
,但m
在某些方面/情況下也可能有幫助。
screen --help
以下是輸出中的相關片段
-dmS name
作為守護進程啟動:以分離模式進行螢幕會話。
答案3
@daily /usr/bin/screen -dms Aquaticscenery /ig.py && python ig.py