首页 > 解决方案 > Cron 将 stdout 和 stderr 重定向到不同的文件

问题描述

我正在使用带有 python-crontab 的 python 脚本在 crontab 中生成作业条目,并每分钟执行一次。

我正在做类似的事情:

my_cron = CronTab(user=getpass.getuser())
job = my_cron.new(command=pathname+'/cron_restart.sh >> ' + pathname + '/log_listener.txt 2>&1')
job.minute.every(1)
my_cron.write()

使 crontab 条目看起来像(显然具有正确的路径名)

* * * * * __pathname__/cron_restart.sh >> __pathname__/log_listener.txt 2>&1

这样,我将 stdout 和 stderr 都重定向到 log_listener.txt 文件。是否可以拆分它们并将它们发送到两个不同的文件?

标签: shellcronpipe

解决方案


这样,我将 stdout 和 stderr 都重定向到 log_listener.txt 文件。是否可以拆分它们并将它们发送到两个不同的文件?

您将两者都重定向到log_listener.txt是因为您特别要求将 stderr ( 2) 的输出重定向 ( >) 到 stdout ( &1)。

如果那不是你想要的,不要那样做吗?

> f是将输出( )从标准输出()1>f重定向到文件的快捷方式,如果存在则截断它。>1f

2是stderr,所以您可以只2>其他文件,以便将stderr 重定向到与stdout 不同的文件。>>是一个附加重定向,因此将以与stdin2>>相同的方式将 stderr 附加到现有文件(或创建它) 。>>

因此,你可以有一个命令

cron_restart.sh >> log_listener.txt 2>>log_error.txt

将 stdout 和 stderr 记录到不同的文件中。


推荐阅读