Linux Crontab权限被拒绝

Linux Crontab权限被拒绝,linux,ubuntu,permissions,crontab,minecraft,Linux,Ubuntu,Permissions,Crontab,Minecraft,我在运行脚本时遇到了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 并具有这些权限(ls-l输出) 我可以使用sudo或not从终端运行命令 .

我在运行脚本时遇到了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
并具有这些权限(ls-l输出)

我可以使用sudo或not从终端运行命令

./start.sh
但它不会从crontab开始。 如果我这样做

我得到以下输出

/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)

提前感谢,, 菲利浦


对特瓦尔伯格回答的回答

1。将craftbukkit上的所有者更改为root,以查看这是否解决了问题

-rw-r--r-- 1 root root 12084211 Nov 21 02:14 craftbukkit.jar
并在my start.sh脚本中添加了一张显式cd,如下所示:

#!/bin/sh
cd /opt/mcserver/
screen java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui
2.我不太清楚你在这里的意思。启动java时,我应该在start.sh文件中使用以下路径吗? (来自哪个java的输出)

3.当我的服务器关闭时,屏幕终止。在“分离模式”下启动屏幕是个好主意吗

仍然收到相同的“权限被拒绝”错误


问题已解决! 通过在屏幕上使用适当的标志,如下所示,它现在可以正常工作了

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

非常感谢那些回答的人,尤其是特瓦尔伯格

start.sh
归“eve:eve”所有,您的crontab以root用户身份运行

您可以通过运行以下命令来解决此问题

chown root:root /opt/craftbukkit/start.sh 
您的crontab将以root用户身份运行


提示:在crontab中运行bash时,始终使用绝对路径(这将使调试更加容易)。

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

以下是一些需要检查的事项:

  • root
    显然在
    start.sh
    上有读取/执行权限,但是
    craftbukkit.jar
    上有哪些权限?root是否可以读取?您可能还希望在
    start.sh
    脚本中添加显式
    cd/path/to/where/craftbukkit.jar/is
  • java
    是否在
    cron
    中的
    root
    默认路径中?请注意,此路径不一定与您通过
    sudo
    su
    或直接以root用户身份登录获得的路径相同-它通常受到更多限制。使用
    java
    craftbukkit.jar
    的完整路径名来解决这个问题
  • 由于
    screen
    不会以可用的终端启动,因此您可能需要
    screen-d-m…
    。希望您打算最终附加到每个
    屏幕
    实例并在以后终止它,或者您已经安排好在脚本完成时自动终止它
  • /var/log/syslog
    条目显示
    cron
    确实执行了脚本,因此它一定是由于上述原因之一(或者我还没有注意到的其他原因)而失败的
  • grep
    中的其他错误仅仅是由于非
    root
    用户没有读取这些特定文件的权限(这是正常的,也是一件好事)

  • 谢谢你的回答,但这没用/var/log/syslog:Nov 27 11:41:01 eve desk CRON[5445]:(root)CMD(/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将所有者更改为:-rwxr-xr-x 1 root 72 Nov 24 14:17 start.sh不太相关,as
    root
    有权读取和执行
    start.sh
    (虽然我们不知道权限是什么,例如,
    craftbukkit.jar
    以及运行
    start.sh
    后,
    root
    最终需要接触的任何其他文件。为什么sudo crontab不能访问这些/var/log文件?以及如何/(和应该)我更改了它们?由于更好的格式可能性,在上面添加了响应。在#2上-如果您通常使用
    /usr/bin/java
    ,那么使用
    /java
    (只需键入
    java
    )-我不确定您是否使用了其他位置,因此我没有建议具体路径。对于#3,我从未尝试在没有可用控制终端的情况下启动
    屏幕
    ,因此我建议了这种可能性-不确定是否有必要,但值得一试。以及“拒绝许可”来自
    grep
    无法读取这些文件-不是来自
    cron
    作业以任何方式失败。是
    cron
    通过电子邮件发送脚本的任何输出吗?I(愚蠢)我没有设置croncab给我发送电子邮件。但是现在,当我设置了croncab时,我得到了这样一个信息:必须连接到终端。所以我猜问题与screen有关?现在它工作了!问题与我的脚本中没有使用screen-d-m有关!
    #!/bin/sh
    cd /opt/mcserver/
    screen java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui
    
    /usr/bin/java
    
    screen -d -m java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui
    
    chown root:root /opt/craftbukkit/start.sh