2011-11-12 63 views
1

在我的crontab文件我执行脚本像这样(我编辑使用sudo crontab -e在crontab):cron作业终止早期

01 * * * * bash /etc/m/start.sh 

脚本运行一些其他的脚本,像这样:

sudo bash -c "/etc/m/abc.sh --option=1" & 
sleep 2 
sudo bash -c "/etc/m/abc.sh --option=2" & 

当cron运行脚本start.sh,我做了ps aux | grep abc.sh,我看到abc.sh脚本正在运行。

几秒钟后,脚本不再运行,即使abc.sh需要几小时才能完成。

如果我从命令行执行sudo bash /etc/m/start.sh &,一切正常(abc.sh脚本在后台运行几个小时直到它们完成)。

如何调试?

有什么我正在做的是阻止这些脚本在后台运行,直到他们完成?

回答

4

您正在启动的程序可能期望终端将其输出发送到或接收输入。

如果你设置了MAILTO=变量,你必须安装了sendmail的(类似的)守护进程,你会得到该错误消息(S)后打印,如果有任何一个电邮:

[email protected] 
01 * * * * bash /path/to/something.sh 

另一种方法来调试,可运行在命令行脚本,同时重定向所有输入和输出:

$ sudo bash -c "foo.sh" > output_file 2>&1 < /dev/null 

此外,系统日志文件(通常在/var/log发现)可能包含有用的提示。