我计划每分钟运行一些bash脚本,我写道:
* * * * * bash ~/Dropbox/temp_scripts/run_all_scripts
在crontab中。
它应该每分钟运行一次,但它不起作用。有谁知道为什么会这样?
答案 0 :(得分:1)
将评论转移到答案中。
将I / O重定向添加到crontab
条目中的命令行:
>/tmp/run_all_scripts.out 2>/tmp/run_all_scripts.err
经过一两分钟后,查看文件的内容。考虑记录环境,看看是否是问题的一部分。并考虑使用bash -x
而不是bash
。
如果您仍然没有收到任何内容(/tmp
中的文件未创建),则您cron
会遇到问题;守护程序没有运行,或者您的用户没有权限使用它(但crontab
没有告诉您),或者您还没有提交crontab
程序(crontab -l
说什么?),或者......真正错误的。
另请注意,cron
作业的输出通常(好吧,至少有时候 - 在Mac OS X上,对于我目前使用的系统,以及Solaris用于我之前使用的另一个)通过电子邮件发送给工作人员。您应该查看系统上的电子邮件。
谢谢!我已经修好了!它不起作用的原因是我使用"
ls -a .sh
"在脚本中,当crontab在它正在执行的文件夹中找不到任何*.sh
个文件时。将其修改为"ls -a $HOME/Dropbox/temp_scripts/.sh
"时,一切正常!这种调试技术非常有用!
在很多方面,它是最基本的调试技术 - 确保你看到实际发生的事情。如果您不确定为什么shell脚本不起作用,请确保您可以看到它正在执行以及它以输出的方式生成什么,并且(经常)确保您可以看到它正在使用bash -x
或等效执行。 (AFAIK,所有shell都支持-x
来跟踪执行情况。)