当前位置:  开发笔记 > 后端 > 正文

如何调试cron没有执行给定脚本的问题 - 或其他?

如何解决《如何调试cron没有执行给定脚本的问题-或其他?》经验,为你挑选了1个好方法。

我有一个Rails脚本,我想每天运行.我知道有很多方法,script/runner有些人不喜欢cron的方法,但它似乎满足了我的需求.

但是,我的脚本没有按计划执行.

我的应用程序存在/data/myapp/current,脚本在script/myscript.rb.我可以手动运行它没有问题,如root:

/data/myapp/current/script/runner -e production /data/myapp/current/script/myscript.rb

当我这样做时,特殊日志文件(log/myscript.log)按预期记录:

Tue Mar 03 13:16:00 -0500 2009 Starting to execute script...
...
Tue Mar 03 13:19:08 -0500 2009 Finished executing script in 188.075028 seconds

cron每天早上4点开始运行. root的crontab:

$ crontab -l
0 4 * * * /data/myapp/current/script/runner -e production /data/myapp/current/script/myscript.rb

事实上,它看起来像今天早上一样尝试运行!

$ tail -100 /var/log/cron
...
Mar  2 04:00:01 hostname crond[8894]: (root) CMD (/data/myapp/current/script/runner -e production /data/myapp/current/script/myscript.rb)
...
Mar  3 04:00:01 hostname crond[22398]: (root) CMD (/data/myapp/current/script/runner -e production /data/myapp/current/script/myscript.rb)
...

但是,我的日志文件中没有条目,并且应该更新的数据尚未更新.日志文件权限(作为测试)甚至设置为全局可写:

$ ls -lh
total 19M
...
-rw-rw-rw- 1 myuser apps 7.4K Mar  3 13:19 myscript.log
...

我在CentOS 5上运行.

所以我的问题是......

    我还能在哪里找到调试信息?

    这可能是SELinux问题吗?是否有可以设置或更改的安全上下文可以解决此错误?

谢谢!

更新

感谢Paul和Luke.它确实是一个环境问题,捕获stderr到日志文件使我能够找到错误.

$ cat cron.log 
/usr/bin/env: ruby: No such file or directory

$ head /data/myapp/current/script/runner 
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/runner'

将特定的Ruby可执行文件添加到命令中就可以了:

$ crontab -l
0 4 * * * /usr/local/bin/ruby /data/myapp/current/script/runner -e production /data/myapp/current/script/myscript.rb >> /data/myapp/current/log/cron.log 2>&1

Luke Francl.. 7

默认情况下,cron将其输出邮寄给运行它的用户.你可以看看那里.

重定向cron运行的脚本输出非常有用,这样您就可以在日志文件中查看结果,而不是在服务器上查看随机用户的本地邮件.

以下是将stdout和stderr重定向到日志文件的方法:

cd /home/deploy/your_app/current; script/runner -e production ./script/my_cron_job.rb >> /home/deploy/your_app/current/log/my_file.log 2>&1

>>stdout重定向到一个文件中,并和2>&1stderr重定向到stdout,因此任何错误信息也会被记录下来.

完成此操作后,您将能够检查错误消息以查看实际发生的情况.



1> Luke Francl..:

默认情况下,cron将其输出邮寄给运行它的用户.你可以看看那里.

重定向cron运行的脚本输出非常有用,这样您就可以在日志文件中查看结果,而不是在服务器上查看随机用户的本地邮件.

以下是将stdout和stderr重定向到日志文件的方法:

cd /home/deploy/your_app/current; script/runner -e production ./script/my_cron_job.rb >> /home/deploy/your_app/current/log/my_file.log 2>&1

>>stdout重定向到一个文件中,并和2>&1stderr重定向到stdout,因此任何错误信息也会被记录下来.

完成此操作后,您将能够检查错误消息以查看实际发生的情况.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有