我正在寻找一种更好的方法来记录 cronjobs。大多数 cronjobs 倾向于向电子邮件或控制台发送垃圾邮件、被忽略或创建另一个日志文件。
在这种情况下,我有一个 Nagios NSCA 脚本,它将数据发送到中央 Nagios 服务器。此 send_nsca 脚本还会将单个状态行打印到 STDOUT,指示成功或失败。
0 * * * * root /usr/local/nagios/sbin/nsca_check_disk
这会将以下消息通过电子邮件发送给 root@localhost,然后转发给我的系统管理员团队。垃圾邮件。
转发的 nsca_check_disk:1 个数据包已成功发送到主机。
我正在寻找一种记录方法:
- 不会向电子邮件或控制台发送垃圾邮件
- 不要再创建需要数月或数年后清理的另一个糟糕的日志文件。
- 将日志信息捕获到某处,以便以后需要时可以查看。
- 适用于大多数 unix
- 适合现有的日志基础设施。
- 使用常见的系统日志约定,如“设施”和“优先级”
- 可以与并不总是在内部进行日志记录的第三方脚本一起工作。
答案1
在写这个问题的过程中,我自己回答了这个问题。所以我会回答我自己”危险边缘“。这扩展了丹尼斯·威廉姆森提供的答案。
下面将把任何 Cron 输出发送到/usr/bin/logger
(包括使用 转换为 stdout 的 stderr 2>&1
),后者将发送到 syslog,带有 'tag'。Syslognsca_check_disk
从那里处理它。由于这些系统(CentOS 和 FreeBSD)已经具有内置日志轮换机制,因此我不必担心像 / 这样的日志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 ,因为它可以很好地与现有的 syslog 配置和基础架构配合使用,并且包含在大多数 Unix 发行版中。大多数 *nix 发行版都已进行日志轮换,并且做得很好。
答案2
通过管道输出记录器。
0 * * * * root /usr/local/nagios/sbin/nsca_check_disk | logger -p local0.notice
编辑:您的更新看起来是正确的。
答案3
您还可以crond
使用选项-s
(或-S
在 Busybox 中)运行,以便将输出发送到syslog
。