我在运行脚本时遇到了crontab的问题。
我的sudo crontab -e长这样:
05 00 * * * /opt/mcserver/backup.sh
10 00 * * * /opt/mcserver/suspend.sh
05 08 * * * /sbin/shutdown -r +1
11 11 * * * /opt/mcserver/start.sh <--- This isn't working
而 start.sh 文件长这样:
#!/bin/sh
screen java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui
并且拥有这些权限(ls -l输出)
-rwxr-xr-x 1 eve eve 72 Nov 24 14:17 start.sh
我可以从终端运行该命令,无论是使用sudo还是不使用
./start.sh
但是它不能通过crontab启动。 如果我这样做:
grep -iR "start.sh" /var/log
我获得以下输出
/var/log/syslog:Nov 27 11:11:01 eve-desk CRON[5204]: (root) CMD (eve /opt/mcserver/start.sh)
grep: /var/log/btmp: Permission denied
grep: /var/log/lightdm/x-0-greeter.log: Permission denied
grep: /var/log/lightdm/lightdm.log: Permission denied
grep: /var/log/lightdm/x-0.log: Permission denied
我的问题是,为什么它不起作用?由于我的脚本在没有使用sudo的情况下运行,我不一定需要将其放入sudo crontab中吗?
(我正在使用Ubuntu 12.10)
提前致谢, 菲利普
twalberg的回答:
1.将craftbukkit的所有者更改为root,以查看是否解决了问题。
-rw-r--r-- 1 root root 12084211 Nov 21 02:14 craftbukkit.jar
同时,在我的 start.sh 脚本中添加了一个显式的 cd,如下所示:
#!/bin/sh
cd /opt/mcserver/
screen java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui
2. 我不太确定你的意思。当我启动Java时,我是否应该在我的start.sh文件中使用以下路径?(从which java输出)
/usr/bin/java
3. 当我的服务器关闭时,屏幕也会被终止。在任何情况下都以“分离模式”启动屏幕是否是一个好主意?
仍然遇到相同的“权限被拒绝”错误。
问题已解决!通过使用屏幕上的适当标志,如下所示,现在它正在按照预期工作!
screen -d -m java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui
非常感谢回答的人,特别是twalberg!
/usr/bin/java
(只需键入“java”),那么使用它应该没问题 - 我不确定您是否使用了不同的位置,因此我没有建议特定的路径。对于#3,我从未尝试过在没有可用控制终端的情况下启动screen
,因此我建议尝试一下这种可能性 - 不确定是否必要,但值得一试。而“Permission denied”来自于grep
无法读取这些文件 - 而不是您的cron
作业以任何方式失败。cron
是否正在通过电子邮件发送脚本的任何输出? - twalberg