2013-09-27 79 views
0

我有计划或多或少像这样的IBM AIX服务器上cron工作: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,因为所述脚本在启动时发出电子邮件通知,并且在我的邮箱中我只是获得了nada。

正如你所看到的,是的,我正在加载我的~/profile,我检查了很多次脚本具有执行权限,并且我绝对确定该行是正确写入的。 crontab也以换行符结束。那么为什么这个工作没有执行?

回答

1

通常我所做的是我有一个脚本可以工作。然后我用另一个脚本包装该脚本来为cron设置一些东西,比如source .profile,重定向stdout和stderr,记录错误等等。我把条目保存在crontab本身中非常简单和干净。它只是更容易和调试。

通常情况下,像这样的问题的人会在他们的.profile中添加一些假设控制tty已连接的东西(比如stty或类似的东西)。我在.profiles中的另一件事是打开跟踪的功能,以便我可以看到.profile加载正在死亡的位置。用“set -x”做到这一点。实际上我有一个.profiles树,所以我在顶部设置了一个变量,如果设置了-x,那么设置-x。

shell不会交互,也不会有控制tty。这是非常罕见的,并且经常会在用户的配置文件中混淆某些内容。 shell可能是“sh”,虽然它不是假设的,但它可能与/ bin/ksh有一些细微的差别。

希望这会有帮助

+0

经过一个小时的抨击我的头对桌子后,我终于找到原因。原因是什么?......我认为我应该调用没有参数的脚本,比如crontab中的其余脚本,但不行,这一次我不得不用特殊的参数来调用它。这项工作开展得很好,我放的脚手架实际上很好,这是脚本,因为它应该没有被调用。 – RAKK

+0

所以基本上,所学到的教训是始终确保我是否真的应该以这种方式调用脚本。 – RAKK