我在IBM AIX服务器上有一个cron
工作,或多或少是这样的:
0 6 * * * (date >> ~/executions.log;. ~/.profile; cd /usr/path/to/the/script; /usr/path/to/the/script/ThisIsTheScript.sh ) > /dev/null 2>&1
当我计划这样的测试时:
0,37 6 * * * (date >> ~/executions.log;. ~/.profile; cd /usr/path/to/the/script; /usr/path/to/the/script/ThisIsTheScript.sh ) > /dev/null 2>&1
...作业只会运行到将最后执行日期追加到~/executions.log
的部分。由于此脚本调用了一个非常庞大的应用程序 - 让我们称之为gargantuanprogram
- 一旦作业触发,它应该显示在ps ax | grep gargantuanprogram
上。但它没有,它甚至没有运行ThisIsTheScript.sh
,因为所述脚本在启动时发出电子邮件通知,而在我的邮箱上我只是得到了虚假信息。
正如你所看到的,是的,我正在加载我的~/profile
,我多次检查过该脚本是否具有执行权限,我绝对确定该行已正确写入。 crontab
也以换行符终止。为什么工作没有执行?
答案 0 :(得分:1)
通常我做的是我有一个有效的脚本。然后我用另一个脚本包装该脚本来为cron设置内容,例如source .profile,重定向stdout和stderr,记录错误等。我保持crontab本身的条目非常简单和干净。它更容易破解和调试。
通常有这样问题的人会在他们的.profile中加入一些东西,假定附加了一个控制tty(就像stty或类似的东西)。我在.profiles中的另一件事是能够打开跟踪,所以我可以看到.profile加载正在死亡的地方。用“set -x”执行此操作。我实际上有一个.profiles树,所以我在顶部设置了一个变量,如果设置了它就会设置-x。
shell不是交互式的,也不具有控制权。这种情况很少见,并且经常会混淆用户的.profile中的内容。 shell可能是“sh”,它可能与/ bin / ksh有一些细微差别,尽管它不是假设的。
希望这有帮助