0

cron在 IBM AIX 服务器上安排了一份工作,或多或少是这样安排的:

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,因为所述脚本在启动时会发送电子邮件通知,而在我的邮箱中我只是收到 nada。

如您所见,是的,我正在加载我的~/profile,我多次检查脚本是否具有执行权限,并且我绝对确定该行编写正确。也以crontab换行符终止。那么为什么作业没有执行呢?

4

1 回答 1

1

通常我所做的是我有一个有效的脚本。然后,我将该脚本与另一个脚本包装起来,为 cron 进行设置,例如源 .profile、重定向 stdout 和 stderr、记录错误等。我使 crontab 本身的条目非常简单和干净。它更容易处理和调试。

通常有此类问题的人会在他们的 .profile 中放置一些东西,假设附加了一个控制 tty(如 stty 或类似的东西)。我的 .profiles 中的另一件事是能够打开跟踪,这样我就可以看到 .profile 加载在哪里死亡。使用“set -x”执行此操作。我实际上有一棵 .profiles 树,所以我在顶部设置了一个变量,如果设置了它,它会执行 set -x 。

shell 不会是交互式的,也没有控制 tty。这种情况很少见,并且经常混淆用户的 .profile 中的某些内容。shell 可能是“sh”,它可能与 /bin/ksh 有一些细微的差异,尽管它不应该是这样。

希望这可以帮助

于 2013-09-28T14:04:18.413 回答