当应用程序作为 cronjob 的一部分被超越时,stderr 的重定向不起作用



调用时

/home/username/temp/build/appname 2> /home/username/temp/log/stderr 1> /home/username/temp/log/stdout

两个 stderr 都被重定向到/home/username/temp/log/stderr,而 stdout 被重定向到/home/username/temp/log/stdout。

但是,在添加 cronjob 时

5 * * * * username /home/username/temp/build/appname 2> /home/username/temp/log/stderr 1> /home/username/temp/log/stdout

应用程序按预期运行,stdout 被重定向到/home/username/temp/log/stdout,但 stderr为空

有什么想法吗?

编辑:/etc/crontab 的顶部是

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

这个问题似乎是我的(命令行qt(应用程序独有的。以下 cronjob 适用于 stderr 的正确重定向:

* * * * * username ls /doesnotexist 2> /home/username/temp/log/ls_stderr

根据您的发行版,crontab 使用的 shell 可能与您预期的不同。我想到了两个解决方案:

  1. 在 crontab 中设置 shell

    SHELL=/bin/bash(或任何您喜欢的外壳(添加到 crontab 的顶部

  2. 使用 shell crontab 正在使用的重定向语法

    您可以通过添加来找到外壳

    * * * * * echo $SHELL > $HOME/cronshell
    

    到你的 crontab。它很可能是/bin/sh,根据您的发行版,它可能会符号链接到不同的 shell。在这里,您可以找到不同 shell 重定向语法的精彩摘要。

相关内容

  • 没有找到相关文章

最新更新