在我的crontab文件中,我执行一个这样的脚本(我使用sudo crontab -e
编辑crontab):
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
脚本在后台运行几个小时,直到完成)。
如何调试?
我正在做的是阻止这些脚本在后台运行直到它们完成?
答案 0 :(得分:5)
您正在启动的程序可能希望终端将其输出发送到或接收输入。
如果您设置了MAILTO=
变量,并且安装了sendmail(-like)守护程序,您将收到一封包含其打印错误消息的电子邮件,如果有的话:
MAILTO=your@email.address.here.com
01 * * * * bash /path/to/something.sh
另一种调试方法是从命令行运行脚本,同时重定向所有输入和输出:
$ sudo bash -c "foo.sh" > output_file 2>&1 < /dev/null
此外,系统日志文件(通常位于/var/log
中)可能包含有用的提示。