更好地loggingcronjobs? 发送cron输出到syslog?

我正在寻找更好的方式来loggingcronjobs。 大多数cronjob往往会垃圾邮件或控制台,被忽略,或创build另一个日志文件。

在这种情况下,我有一个Nagios NSCA脚本,它将数据发送到中央Nagios服务器。 这个send_nsca脚本还会向STDOUT打印单个状态行,表示成功或失败。

0 * * * * root /usr/local/nagios/sbin/nsca_check_disk 

这会将以下消息通过电子邮件发送给root @ localhost,然后将其转发给我的系统pipe理员小组。 垃圾邮件。

转发nsca_check_disk:1个数据包成功发送到主机。

我正在寻找一种logging方法:

  1. 不要将邮件垃圾邮件发送到电子邮件或控制台
  2. 不要创build另一个需要清理几个月或几年后的krufty日志文件。
  3. 将日志信息捕获到某处,以便稍后可以查看。
  4. 适用于大多数unixes
  5. 适合现有的日志基础设施。
  6. 使用常见的系统日志约定,如“设施”和“优先”
  7. 可以使用第三方脚本,这些脚本并不总是在内部执行日志logging。

在写这个问题的过程中,我自己回答。 所以我会回答自己“ 危险的风格 ”。 这扩大了丹尼斯·威廉姆森提供的答案。

下面将把任何Cron输出发送到/usr/bin/logger (包括使用2>&1转换为标准输出的stderr),该输出将发送到系统日志,标记为nsca_check_disk 。 系统日志从那里处理它。 由于这些系统(CentOS和FreeBSD)已经内置了日志轮转机制,所以我不需要担心像/ var/log/mycustom.log这样的var/log/mycustom.log填满磁盘。

 */5 * * * * root /usr/local/nagios/sbin/nsca_check_disk 2>&1 | /usr/bin/logger -t nsca_check_disk 

/ var / log / messages现在有一个额外的消息说:

 Apr 29, 17:40:00 192.168.6.19 nsca_check_disk: 1 data packet(s) sent to host successfully. 

我喜欢/ usr / bin / logger,因为它适用于现有的syslogconfiguration和基础架构,并且包含在大多数Unix发行版中。 大多数* nix发行版已经做了日志轮转并且做得很好。

通过logging器输出输出。

 0 * * * * root /usr/local/nagios/sbin/nsca_check_disk | logger -p local0.notice 

编辑:你的更新看起来像正确的路要走。

您也可以使用选项-s (或在Busybox中的-S )运行crond ,以便将输出发送到syslog