系统相关
首页 > 系统相关> > 在Linux crontab中,我的程序的stderr必须重定向,为什么?

在Linux crontab中,我的程序的stderr必须重定向,为什么?

作者:互联网

我写了一个程序,可以输出到stderr.当我通过Linux crontab运行它时,我必须重定向stderr.如果没有,程序将以SIGPIPE退出.为什么?

不好

45 10 * * * /home/sandy/test > /home/sandy/test.log &

45 10 * * * /home/sandy/test > /home/sandy/test.log 2>&1 &

解决方法:

您正在后台运行命令(& at the end).这意味着cron已经开始运行命令的shell将不会等待它的完成并在命令启动后立即终止.如果您的程序现在尝试写入stderr,则没有任何内容连接到读取端,您将获得一个SIGPIPE.如果重定向到文件,则不会发生这种情况,因为正在运行的进程知道要写入的位置.

解决这个问题的另一种方法是在前台运行命令,即没有& amp;在末尾.无论如何,这是更好的做法.

标签:linux,stderr,crontab,sigpipe
来源: https://codeday.me/bug/20190621/1250097.html