我每天 18:35 运行一个简单的 cronjob:
05 18 * * * ~/job.sh 2>&1 >> ~/job.log
所以 ~/job.sh 的输出应该写入 ~/job.log 中。在job.sh中,有一些echo命令和一些python脚本被执行,例如:
echo 'doing xyz'
python doXYZ.py
现在,无论 python 脚本产生什么输出,它们都不会写入 ~/job.log 中。我只在 ~/job.log 中看到回显文本。我怎样才能重定向completeshell脚本的输出到~/job.log?
Arkaitz 有最简单的解决方案。但是,要查看您的代码片段有什么问题,我们需要查看 bash 手册:
请注意,重定向的顺序很重要。例如,
命令
ls > dirlist 2>&1
将标准输出和标准错误定向到文件目录列表,
当命令
ls 2>&1 > dirlist
仅将标准输出定向到文件目录列表,因为标准
在标准输出之前,错误已从标准输出中重复
put 被重定向到目录列表。
所以显然输出重定向仅重定向到target另一个流的,而不是另一个流本身。当 bash 解析你的命令行时,它会出现2>&1
子句和重定向stderr
到目标stdout
,此时仍然是控制台(或附加到的任何内容)cron
's stdout
)。只有在此之后才会stdout
被重定向。
所以你真正想要的是:
05 18 * * * ~/job.sh >>~/job.log 2>&1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)