cron 作业在 cron.daily 中运行,但不在 crontab 文件中运行。已尝试建议的调试方法。

cron 作业在 cron.daily 中运行,但不在 crontab 文件中运行。已尝试建议的调试方法。

我已经为提问道歉了其他cron 问题。我在网上读了几十篇帮助文章,但仍然没有解决方案。所以出于好奇,我需要找到一个解决方案。


我只是想每天凌晨 4 点运行一个命令。这是我目前所做的:

  1. # crontab -e。添加此行:00 04 * * * root ruby /home/script.rb list >> /tmp/output.log。(script.rb 只包含“puts 'hello'”)
  2. script.rb 由 root 拥有,并且权限设置为在所有用户上执行。
  3. 我运行rvm cron setup安装一些环境变量到 crontab 文件中,以便 cron 作业找到我的 ruby​​ 可执行文件。
  4. 向 crontab 文件添加了更多环境变量,例如我的PATHSHELL=/bin/bashBASH_ENV=/root/.bashrc

凌晨 4 点后,我检查了 cron 日志,发现脚本确实执行了。 Dec 14 4:00:01 admin CRON[25374]: (root) CMD (root ruby /home/script.rb list >> /tmp/output.log)但是当我检查时/tmp,没有 output.log 文件存在。当我单独运行该命令时,/tmp/output.log 会出现,并且包含 hello,因此该命令有效。

  1. 所以我回到我的 crontab 文件并更改ruby/usr/local/rvm/rubies/ruby-2.2.1/bin/ruby( 的输出which ruby) 以使所有内容都成为绝对路径。它运行,但仍然没有 /tmp/output.log。
  2. 我将 crontab 中的行替换为:00 04 * * * root /home/run_script而不是 where run_scriptcontains:,
    #!/bin/bash /usr/local/rvm/rubies/ruby-2.2.1/bin/ruby /home/script.rb list >> /tmp/output.log 以尝试使用脚本文件代替 crontab 中的一行命令。它运行了,但仍然没有 /tmp/output.log。
  3. 我进入run_script文件并删除所有 ruby​​ 内容并采用简单的方法:
    #!/bin/bash echo "hello" >> /tmp/output.log 它运行,但仍然没有 /tmp/output.log。

我还应该注意,我已MAILTO=root在 crontab 文件中进行了设置,但没有邮件发送给 root。

  1. 现在我做了另一个实验,当我把run_script它放入时/etc/cron.daily,它运行良好。没有问题。

其他说明:Cron 正在运行:ps -ef | grep cron | grep -v grep输出 cron 正在运行。crontab 文件中我的命令后面有一个空行。

cron 似乎很难调试。系统日志只告诉我 cron 作业已运行,但没有其他信息。我没有收到任何邮件,所以这对我没用。幸运的是 /etc/cron.daily 目前可以工作,但我想知道 crontab 为什么不工作。

关于调试有什么建议、想法或提示吗?

答案1

这对于用户的 crontab 文件来说是错误的格式。您需要删除用户规范root'. You would have that in/etc/crontab',但不需要删除每个用户的 crontab。

相关内容