脚本在 crontab 中不起作用

脚本在 crontab 中不起作用

我有一个脚本,每次重启时都会启动我的 minecraft 服务器。我可以在日志中看到它正在调用 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

但我个人更喜欢完整路径方法,因为它对我来说更干净,并且 $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现代安装的路径中。

相关内容