【问题标题】:Crontab not really running as root when it should be?crontab 应该在什么时候没有真正以 root 身份运行?
【发布时间】:2014-01-30 14:09:51
【问题描述】:

我有 Ubuntu,并且在用户“alex”下运行。我使用 crontab 以 root 身份运行以下 bash 脚本,但是它向我发送了一封电子邮件,并且由于结果不存在,它看起来运行不正确:

/dev/sda - Reallocated_Sector_Ct 是

但是,如果我从 webmin 手动运行 crontab 作业,它可以正常工作。但是当它计划运行时,它就会失败。也许它并没有真正以 root 身份运行?

这是我的代码:

#!/bin/bash
SMARTCHECK=`smartctl -a /dev/sda | grep "Reallocated_Sector_Ct" | awk 'NR==1 {print $10}'`
echo "/dev/sda - Reallocated_Sector_Ct is $SMARTCHECK"
if [ "$SMARTCHECK" != "0" ]; then
    mail -s "Failing: /dev/sda" alex <<< "/dev/sda - Reallocated_Sector_Ct is $SMARTCHECK"
fi

谢谢!

【问题讨论】:

  • 你是如何将它设置为从 root 启动的?是在root的crontab中,sudo没有密码,其他的吗?
  • 第一个猜测是smartctl不在路径中?并尝试在命令行中使用env -i 运行该命令,这样可以吗?
  • 如果不知道您是如何设置 crontab 的,这是无法回答的。
  • 感谢 Wikken,看来我必须添加完整路径 - 我现在正在运行 /usr/sbin/smartctl。我从 webmin 添加了这个 crontab。

标签: bash crontab


【解决方案1】:

使用 cron 运行脚本有两种可能性:

  1. 您使用系统 crontab /etc/crontab。在这种情况下,它们以 root 身份运行。
  2. 您使用用户的 crontab,可通过 crontab -e 访问。在这种情况下,它们以用户的权限运行,该用户已将命令添加到他的 crontab 中。

【讨论】:

  • root 用户有自己的用户crontab。请记住,用户 crontab 和系统 crontab 具有不同的语法;后者指定运行命令的帐户(不一定是root)。
【解决方案2】:

cronjob 脚本中更多可能的问题。

  • 用完整路径更改脚本中的所有命令,尤其是命令smartctl
  • 检查您的系统是否有 /bin/bash,而不是 /usr/bin/bash,或者将 cronjob 设置为:

    0 * * * * ~/.profile;/usr/bin/bash YOUR_SCRIPT

  • 查看alex账号的邮件,如果有错误信息可以查到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2017-07-29
    • 2013-12-19
    相关资源
    最近更新 更多