跳过某些 cron 作业的 syslog/rsyslog 日志记录

跳过某些 cron 作业的 syslog/rsyslog 日志记录

在大多数 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

相关内容