在我的crontab文件中,我执行一个这样的脚本(我使用crontab编辑sudo crontab -e
):
01 * * * * bash /etc/m/start.sh
Run Code Online (Sandbox Code Playgroud)
该脚本运行其他一些脚本,如下所示:
sudo bash -c "/etc/m/abc.sh --option=1" &
sleep 2
sudo bash -c "/etc/m/abc.sh --option=2" &
Run Code Online (Sandbox Code Playgroud)
当cron运行脚本时start.sh
,我会ps aux | grep abc.sh
看到abc.sh
脚本正在运行.
几秒钟后,脚本不再运行,即使abc.sh
需要几个小时才能完成.
如果我sudo bash /etc/m/start.sh &
从命令行执行操作,一切正常(abc.sh
脚本在后台运行数小时,直到完成).
我该如何调试?
我正在做的是阻止这些脚本在后台运行,直到它们完成为止?
您正在启动的程序可能期望终端将其输出发送到或接收来自的输入.
如果您设置了MAILTO=
变量,并且安装了sendmail(-like)守护程序,您将收到一封包含其打印的错误消息的电子邮件,如果有的话:
MAILTO=your@email.address.here.com
01 * * * * bash /path/to/something.sh
Run Code Online (Sandbox Code Playgroud)
另一种调试方法是从命令行运行脚本,同时重定向所有输入和输出:
$ sudo bash -c "foo.sh" > output_file 2>&1 < /dev/null
Run Code Online (Sandbox Code Playgroud)
此外,系统日志文件(通常位于/var/log
)中可能包含有用的提示.