Mar*_*ter 2 cron syslog error-handling
MTA
我的桌面上没有安装。
每当脚本出现问题时cronjob
,我都会在日志中看到以下内容:
CRON: (CRON) info (No MTA installed, discarding output)
Run Code Online (Sandbox Code Playgroud)
一个应该运行的脚本cron
生成了一个错误,并cron
希望通过电子邮件向我发送该错误。
但我希望在我的日志中看到错误,即正常记录到syslog
,与上面的消息相同info
。
是否可以告诉cron
忘记MTA
并将所有内容(包括错误)记录到本地syslog
?
@roaima 的解决方案非常适合我原来的问题。但我意识到我需要更复杂的语法cronjob
,其中stdout
from 通过command1
管道传输到command2
,并且stderr
(从两者?)通过管道传输到command3
。
这是一个具体的例子(简化):
0 * * * * mysqldump mydb | ifne xz > "/tmp/$(date +\%F).sql.xz" | logger -t mysqldump -p cron.err
Run Code Online (Sandbox Code Playgroud)
在 abova 示例中,我需要将 stdout 从 发送mysqldump
到ifne xz
,并且仅当其中一个mysqldump
或ifne xz
生成错误时,我才需要将其通过管道传输到记录器。
dash
该语法需要在( /bin/sh
)中起作用
您可以使用记录器子系统。有两种变体,具体取决于您systemd
是否安装。
与systemd
- 使用systemd-cat
echo This is a test with systemd-cat | systemd-cat -t mytest -p info
Run Code Online (Sandbox Code Playgroud)
这会将消息写入日志记录器(请参阅 参考资料journalctl
),并且还会写入遗留系统日志记录子系统,您可以在其中找到输出/var/log/syslog
,等等。
journalctl -t mytest
-- Logs begin at Thu 2020-05-21 07:41:00 UTC, end at Mon 2020-06-01 13:34:56 UTC. --
Jun 01 13:34:56 pi mytest[24236]: This is a test through systemd-cat
Run Code Online (Sandbox Code Playgroud)与syslog
- 使用logger
echo This is a test with logger | logger -t mytest -p local0.info
Run Code Online (Sandbox Code Playgroud)
这会通过 syslog 子系统(请参阅rsyslog.conf
或类似)写入一条消息,您可以在其中找到输出/var/log/syslog
,等等。
tail /var/log/syslog
[...]
Jun 1 13:34:56 pi mytest[24236]: This is a test through systemd-cat
Jun 1 13:38:28 pi mytest: This is a test through logger
Run Code Online (Sandbox Code Playgroud)要使用这些日志记录选项之一,只需附加到您的作业,调整示例中的cron
标签名称 ( myscript
) 和优先级 ( )info
0 * * * * /path/to/script 2>&1 | systemd-cat -t myscript -p info
Run Code Online (Sandbox Code Playgroud)
现在您已经提供了一个具体的示例,您希望将stdout写入目标数据文件,但想要记录stderr,您可以使用这个
0 * * * * ( mysqldump mydb | ifne xz > "/tmp/$(date +\%F).sql.xz" ) 2>&1 | logger -t mysqldump -p cron.err
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1376 次 |
最近记录: |