在大多数 GNU/Linux 发行版中,默认情况是将每个 cron 作业的启动(以及许多不同的事件)记录到系统日志中。这相当方便,但不适用于非常频繁的作业,例如每 1 分钟启动一次。
我知道如何通过/etc/rsyslog.conf
( *.*;cron,auth,authpriv.none -/var/log/syslog
) 将所有 cron 作业事件重定向到不同的日志,并且很容易将日志记录严格限制为仅通过/etc/default/cron
( EXTRA_OPTS="-L 4"
) 记录错误事件。但这会影响所有 cron 作业。
如果我想限制日志记录怎么办肯定cron 作业(表示频繁的每 1 分钟作业)?是否可以通过/etc/rsyslog.conf
或本身进行设置/etc/crontab
?系统是Debian 8.0 Jessie。
答案1
恕我直言,不可能通过配置文件,因为正如你所说,这会影响全部用户的 cron 作业。
但是,可以强制重定向特定 cron 作业的 stdout 输出或 stdout 和 stderr,如下所示:
* * * * * cron_cmdline_job1 >> /<path>/cron_job1.stdout.log
* * * * * cron_cmdline_job2 >>& /<path>/cron_job2.stdout_stderr.log
仅重定向标准输出的优点是,当作业结束时,您可以立即收到包含标准错误内容的电子邮件(如果这是您的偏好,则同样可以被视为缺点)。
如果对此类日志不感兴趣,那么您可以直接访问/dev/空当然,相反。
答案2
您可以有一个单独的、长时间运行的cron
作业来执行每 1 分钟一次的作业吗?就像是:
#!/bin/bash
flagfile="/var/run/longrunner.pid"
rm -f "$flagfile" 2>/dev/null
printf "$PID\n" >"$flagfile"
while [[ -e "$flagfile ]] ; do
shortjob &
sleep 60s
done
我将其置于shortjob
背景中,这样就不会扭曲 60 秒的睡眠。由于sleep
不限于整数值,因此您可以调整延迟。
kill -9 $(cat /var/run/longrunner.pid)
您可以通过OR停止“每分钟”作业提交rm /var/run/longrunner.pid
。