我已经为提问道歉了其他cron 问题。我在网上读了几十篇帮助文章,但仍然没有解决方案。所以出于好奇,我需要找到一个解决方案。
我只是想每天凌晨 4 点运行一个命令。这是我目前所做的:
# crontab -e
。添加此行:00 04 * * * root ruby /home/script.rb list >> /tmp/output.log
。(script.rb 只包含“puts 'hello'”)- script.rb 由 root 拥有,并且权限设置为在所有用户上执行。
- 我运行
rvm cron setup
安装一些环境变量到 crontab 文件中,以便 cron 作业找到我的 ruby 可执行文件。 - 向 crontab 文件添加了更多环境变量,例如我的
PATH
、SHELL=/bin/bash
和BASH_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,因此该命令有效。
- 所以我回到我的 crontab 文件并更改
ruby
为/usr/local/rvm/rubies/ruby-2.2.1/bin/ruby
( 的输出which ruby
) 以使所有内容都成为绝对路径。它运行,但仍然没有 /tmp/output.log。 - 我将 crontab 中的行替换为:
00 04 * * * root /home/run_script
而不是 whererun_script
contains:,
#!/bin/bash /usr/local/rvm/rubies/ruby-2.2.1/bin/ruby /home/script.rb list >> /tmp/output.log
以尝试使用脚本文件代替 crontab 中的一行命令。它运行了,但仍然没有 /tmp/output.log。 - 我进入
run_script
文件并删除所有 ruby 内容并采用简单的方法:
#!/bin/bash echo "hello" >> /tmp/output.log
它运行,但仍然没有 /tmp/output.log。
我还应该注意,我已MAILTO=root
在 crontab 文件中进行了设置,但没有邮件发送给 root。
- 现在我做了另一个实验,当我把
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。