使用 cron 在屏幕上启动脚本

使用 cron 在屏幕上启动脚本

如果之前有人问过这个问题,我很抱歉,但我不知道如何对此提出搜索查询。我对 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/logi get 的系统日志文件

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 才能访问 Cron 中的任何屏幕命令

我做错了什么以及我需要做什么来纠正我的问题。

編輯:更改了 crontab 以匹配我服务器上的当前内容,问题仍然存在

start.sh 的 Pastebin

http://pastebin.com/9QcWyqYF

答案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按照此命令使用SU 问题

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

更新

尝试/bin/bash或您使用的 Shell 所在的任何地方。

 3 0 * * * /bin/bash /home/root/spaceengineers/start.sh

也许添加内容来start.sh帮助调试。

您可以使用以下which命令查找 shell。可能必须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

相关内容