我需要有关cron作业的帮助,该作业每天将输出发送到文件并每月覆盖此文件,我唯一的问题是如何使其每个月都被覆盖,因此我需要在一项作业中执行此操作,因此创建2项作业将其输出到文件以及其他每个月将其删除的图片
答案 0 :(得分:0)
您可以每天运行它,但可以使用date +%w
打印日期,并根据此采取不同的操作(用>
调用来掩盖文件而不是附加>>
)。
请注意,某些cron守护程序要求%
才能转义,因此\%
。
# Run every day at 00:30 but overwrite file on Mondays; append every other day.
# Note that this requires bash as your shell.
# May need to override with SHELL=/bin/bash
30 00 * * * if [ "$(date +\%w)" = "1" ]; then /your/command > /your/logfile; else /your/command >> /your/logfile; fi
编辑:
您在上面的评论中提到,您的实际目标是日志轮换。
Linux系统的规范是使用logrotate
之类的东西来管理这样的日志。这样做的好处还在于,您可以保留多个先前的日志文件,并根据需要压缩它们。
我建议您使用logrotate配置代码片段来实现您的目标,而不是在cron作业本身中完成。如果只是为了日志轮换,将其放在cron作业中是违反直觉的。
这是一个示例logrotate代码段,根据您使用的Linux发行版,它可能位于/etc/logrotate.d/yourapp
之类的位置。
/var/log/yourlog {
daily
missingok
# keep one year of logs
rotate 365
compress
# keep the first one uncompressed for ease of viewing
delaycompress
}
这将导致您的日志文件每天轮换,第一次迭代类似/var/log/yourlog.1
,然后是压缩迭代,例如/var/log/yourlog.2.gz
,/var/log/yourlog.3.gz
等。
因此,我认为您的问题实际上不是Cron问题。上面使用的cron欺骗手段仅在以下情况下才适用:例如,当您想在一个月的最后一个星期日或该月的最后一天解雇某项工作,或其他无法用cron语法表达的条件时