如何重定向cron脚本的完整输出

pru*_*mme 4 python shell cron

我有一个简单的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手册:

请注意,重定向的顺序非常重要.例如,命令

  ls > dirlist 2>&1
Run Code Online (Sandbox Code Playgroud)

在命令时将标准输出和标准错误都指向文件dirlist

 ls 2>&1 > dirlist
Run Code Online (Sandbox Code Playgroud)

仅将标准输出定向到文件转向器,因为在将标准输出重定向到转向器之前,标准错误与标准输出重复.

显然,输出重定向只重定向到另一个流的目标,而不是重定向到另一个流本身.当bash解析你的命令行时,它会出现在2>&1子句上并重定向stderr到目标stdout,在这一点上,目标仍然是控制台(或附加到其上cron的任何东西stdout).只有在此之后才会stdout被重定向.

所以你真正想要的是:

05 18 * * * ~/job.sh >>~/job.log 2>&1
Run Code Online (Sandbox Code Playgroud)