2012-11-27 126 views
4

我在运行脚本时遇到了crontab问题。Crontab权限被拒绝

须藤的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的响应

上craftbukkit更改所有者根,看看是否解决了这个问题。

-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文件中使用以下路径吗? (输出从哪个Java

/usr/bin/java 

3.当我的服务器关闭,屏幕被终止。无论如何,以“分离模式”启动屏幕是一个好主意吗?

仍得到“权限被拒绝”错误。


问题解决了! 通过在屏幕上使用正确的标志,如下所示,它现在正在工作,因为它应该!

screen -d -m java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui 

非常感谢那些回答,尤其是twalberg!

+1

关于#2 - 使用'/ usr/bin/java'应该没问题,如果这是你通常使用的(只需输入'java') - 我不确定你是否使用了不同的位置,所以我没有提出具体的路径。对于#3,我从来没有试过在没有控制终端的情况下启动'screen',所以我建议这种可能性 - 不确定是否有必要,但值得尝试。而“权限被拒绝”来自'grep'不能读取这些文件 - 而不是来自你的'cron'作业失败。 'cron'是否通过电子邮件发送脚本中的任何输出? – twalberg

+0

我(愚蠢的)没有设置croncab给我发电子邮件。 但现在当我做了,我得到了这个: 必须连接到一个终端。 所以我想这个问题与屏幕有关? –

+0

现在它可以工作!该问题与在脚本中不使用_screen -d -m_有关! –

回答

1

这里有一些事情要检查:

  1. root显然具有读/上start.sh执行权限,但什么是对craftbukkit.jar的权限 - 可以root看了吗?您可能还想在start.sh脚本中添加明确的cd /path/to/where/craftbukkit.jar/is
  2. javaroot的默认路径cron?请注意,此路径不一定与您通过sudosu或直接以root身份登录的路径相同 - 它通常受到更多限制。使用全路径名称javacraftbukkit.jar来解决这个问题。
  3. 由于screen不会以可用的终端开始,因此您可能需要使用screen -d -m ...。希望您打算最终附加到每个screen实例并稍后终止它,或者您已安排在脚本完成时自动终止它...
  4. /var/log/syslog条目显示cron实际上执行脚本,所以它必须因上述原因之一(或其他我还没有注意到的)而失败
  5. 来自grep的其他错误仅仅是由于您的非root用户没有权限读取这些特定文件(这是正常的,也是一件好事)。
+0

由于更好的格式化可能性,添加了上述响应。 –

1

start.sh由“eve:eve”所有,您的crontab以root身份运行。

您可以通过运行以下命令

chown root:root /opt/craftbukkit/start.sh 

你的crontab会虽然以root身份运行解决这个问题。

提示:在crontab中运行bash时,总是使用绝对路径(这会使调试更容易)。

+1

感谢您的回答,但这并没有帮助。 /var/log/syslog:Nov 27 11:41:01 eve-desk CRON [5445] :(根)CMD(/ opt/mcserver/start。sh) grep:/ var/log/btmp:权限被拒绝 grep:/var/log/lightdm/x-0-greeter.log:权限被拒绝 grep:/var/log/lightdm/lightdm.log:Permission denied grep:/var/log/lightdm/x-0.log:权限被拒绝 已将所有者更改为: -rwxr-xr-x 1 root root 72 Nov 24 14:17 start.sh –

+0

不是真正相关的,因为'root'有权限读取并执行'start.sh'(虽然我们不知道权限是什么,例如'craftbukkit.jar'和任何其他根文件最终需要接触的文件运行'start.sh' – twalberg

0

日志显示用户无法访问目录“/ var/log /”,您应该为cron的所有者设置日志文件的授权。

+0

为什么_sudo crontab_无法访问这些/ var/log文件?以及我如何更改它们? –