我写了一个程序,可以输出到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;在末尾.无论如何,这是更好的做法.