根 crontab 无法正确运行,用户 cron 作业可以

Posted

技术标签:

【中文标题】根 crontab 无法正确运行,用户 cron 作业可以【英文标题】:Root cronjob does not run correctly, user cronjob does 【发布时间】:2019-06-06 10:08:20 【问题描述】:

我正在尝试运行根 cronjob 来执行脚本。

这是我放入sudo crontab -e的cronjob:

*/1 * * * * ~/temperature_log/logtemp.sh >> ~/temperature_log/templog.log>&1

脚本需要hddtemp 的root 权限。 不幸的是,templog.log 文件从未出现。系统日志说:

Jun  6 13:09:01 user CRON[32433]: (root) CMD (~/temperature_log/logtemp.sh >> ~/temperature_log/templog.log>&1)
Jun  6 13:09:01 user CRON[32426]: (CRON) info (No MTA installed, discarding output)

显然,脚本正在运行,但从那里出现了问题。

更奇怪的是:如果我只通过 crontab -e 运行用户 cron,脚本会执行(但没有 root 权限,所以它对我没有用处)并写入日志文件。

如何确保我的根 crontab 正常工作?

我以没有 root 权限的用户身份通过​​ ssh 连接到这台计算机,但我确实有 root 密码。

编辑

我现在更改了程序,我希望它通过logger 登录到系统日志。同样,手动运行脚本可以正常工作并且可以正确记录,但从 crontab 运行它只会显示以下内容:

Jun 6 14:27:01 user CRON[1657]: (root) CMD (Jun 6 15:06:01 insystems CRON[25328]: (root) CMD (/bin/sh ~/temperature_log/logtemp.sh)

没有记录任何信息。我添加了 /dev/null 部分以消除电子邮件警告。我不打算安装电子邮件服务。

【问题讨论】:

您是否编写了发送电子邮件警报的脚本?未安装邮件服务时会出现警告“(未安装 MTA,丢弃输出)”。大多数 Linux 发行版都安装了邮件服务(包括 MTA)。 Ubuntu虽然没有。您可以安装邮件服务(例如 postfix)来解决此问题。 sudo apt-get install postfix 另外,尝试提供文件的完整路径(绝对路径):~/temperature_log/logtemp.sh 和 ~/temperature_log/templog.log 确保 logtemp.sh 具有执行权限。如果没有,发出命令 chmod +x logtemp.sh 【参考方案1】:

您是否编写了发送电子邮件警报的脚本?未安装邮件服务时会出现警告“(未安装 MTA,丢弃输出)”。

大多数 Linux 发行版都安装了邮件服务(包括 MTA)。 Ubuntu 没有。

您可以安装一个邮件服务,例如 postfix,来解决这个问题。

sudo apt-get install postfix

另外,请尝试提供文件的完整路径(绝对路径): ~/temperature_log/logtemp.sh 和 ~/temperature_log/templog.log

确保 logtemp.sh 具有执行权限。如果否,则发出命令

chmod +x logtemp.sh

【讨论】:

我尝试了所有这些东西,除了后缀。如果我只想登录syslog,为什么还需要邮件服务? 当您在 shell 中执行脚本时,您是否获得了所需的输出?还可以尝试在调用脚本之前附加 /bin/sh。示例:*/1 * * * * /bin/sh /root/temperature_log/logtemp.sh >> /root/temperature_log/templog.log > &1 如果我这样做sudo sh logtemp.sh(系统日志:Jun 6 14:43:08 user user: Temperature log: /dev/sda1: CT250MX500SSD1: 54°C),它就可以工作。但是当 cron 调用它时,我在系统日志中得到的只是Jun 6 14:43:01 user CRON[12283]: (root) CMD (/bin/sh ~/temperature_log/logtemp.sh)【参考方案2】:

我的解决方案是将 cronjob 添加到 crontab -e 而不是 /etc/crontab。从那里开始,它没有问题。

我可能在另一个 crontab 文件中犯了一个错误,但这个解决方案对我来说没问题。

【讨论】:

以上是关于根 crontab 无法正确运行,用户 cron 作业可以的主要内容,如果未能解决你的问题,请参考以下文章

linux中每个用户都可以使用crontab么?

linux使用crontab实现PHP执行计划定时任务

使用 cron 每 5 分钟后无法运行 python 脚本

使用cron实现任务计划

cygwin下如何运行crontab定时脚本?

Cron 和 Crontab 的区别?