更好地记录 cronjobs?将 cron 输出发送到系统日志?

Ste*_*ski 53 linux unix logging syslog cron

我正在寻找一种更好的方式来记录 cronjobs。大多数 cronjobs 倾向于向垃圾邮件或控制台发送垃圾邮件,被忽略或创建另一个日志文件。

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

0 * * * * root    /usr/local/nagios/sbin/nsca_check_disk
Run Code Online (Sandbox Code Playgroud)

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

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

我正在寻找一种日志记录方法:

  1. 不会向电子邮件或控制台发送垃圾邮件
  2. 不要再创建另一个需要在数月或数年后进行清理的 krufty 日志文件。
  3. 在某处捕获日志信息,以便以后需要时可以查看。
  4. 适用于大多数unix
  5. 适合现有的日志基础架构。
  6. 使用常见的系统日志约定,如“设施”和“优先级”
  7. 可以使用不总是在内部进行日志记录的第三方脚本。

Ste*_*ski 85

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

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

*/5 * * * * root    /usr/local/nagios/sbin/nsca_check_disk 2>&1 | /usr/bin/logger -t nsca_check_disk
Run Code Online (Sandbox Code Playgroud)

/var/log/messages 现在有一条额外的消息,内容如下:

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

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

  • Ubuntu 中的 systemd `00 00 * * * systemd-cat -t "tagname" /path/to/app.sh` 在 `sudo crontab -u root -e` 之后 (3认同)
  • @Brettski 见 http://superuser.com/questions/71428/what-does-21-do-in-command-line (2认同)

Den*_*son 7

通过logger管道输出。

0 * * * * root    /usr/local/nagios/sbin/nsca_check_disk | logger -p local0.notice
Run Code Online (Sandbox Code Playgroud)

编辑:您的更新看起来是正确的方法。

  • “消息 - 将消息写入日志;如果未指定,并且未提供 -f 标志,则记录标准输入。” (3认同)