我有一个简单的cronjob每天18:35运行:
05 18 * * * ~/job.sh 2>&1 >> ~/job.log
Run Code Online (Sandbox Code Playgroud)
所以〜/ job.sh的输出应写入〜/ job.log.在job.sh中,有一些echo命令和一些python脚本被执行,例如:
echo 'doing xyz'
python doXYZ.py
Run Code Online (Sandbox Code Playgroud)
现在,无论python脚本产生什么输出,它们都不会写入〜/ job.log.我只在〜/ job.log中看到echo文本.如何将shell脚本的完整输出重定向到〜/ job.log?
wds*_*wds 16
Arkaitz有最简单的解决方案.但是,要查看您的代码段有什么问题,我们需要进入bash手册:
请注意,重定向的顺序非常重要.例如,命令
Run Code Online (Sandbox Code Playgroud)ls > dirlist 2>&1在命令时将标准输出和标准错误都指向文件dirlist
Run Code Online (Sandbox Code Playgroud)ls 2>&1 > dirlist仅将标准输出定向到文件转向器,因为在将标准输出重定向到转向器之前,标准错误与标准输出重复.
显然,输出重定向只重定向到另一个流的目标,而不是重定向到另一个流本身.当bash解析你的命令行时,它会出现在2>&1子句上并重定向stderr到目标stdout,在这一点上,目标仍然是控制台(或附加到其上cron的任何东西stdout).只有在此之后才会stdout被重定向.
所以你真正想要的是:
05 18 * * * ~/job.sh >>~/job.log 2>&1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6190 次 |
| 最近记录: |