让所有 systemd 计时器在出错时向 root 发送邮件

Fra*_*rtì 7 linux cron systemd

croncrontab就作业错误向所有者发送电子邮件。

systemd当它运行计时器时我怎样才能做同样的事情?

注意:我并不是在寻找向特定服务添加电子邮件通知的方法。或多项服务。理想情况下,我不想编程。我只是想知道systemd当任何计时器或服务失败时如何告诉 root 发送电子邮件。我不敢相信systemd没有实现由配置文件中的选项启用的这种基本通知。

然而,在事实上systemd缺乏这样一个基本功能的可悲情况下,我可以使用一些外部包,它的工作方式与logcheck系统日志的工作方式类似。

小智 2

是的,systemd 似乎没有实现服务或计时器单元的邮件输出。

不过,我想出了一个简短的解决方案。实际上,我们遇到了与文章中的 certbot 链接相同的问题。因此,假设您想要监控 certbot.service (在其他情况下,只需替换您的服务名称)。该行为与 cron 不完全一样。当手动启动或从计时器启动时服务失败时,将发送邮件。

mkdir -p /etc/systemd/system/certbot.service.d
cat > /etc/systemd/system/certbot.service.d/mailto.conf <<'EOF'
[Service]
Environment=MAILTO=yourname@test.com
EOF
Run Code Online (Sandbox Code Playgroud)
cat > /etc/systemd/system/certbot.service.d/mailout.conf <<'EOF'
[Service]
# Mail on service error, ignore exitcode for execstoppost
ExecStopPost=-/bin/bash -c 'if [ "$EXIT_STATUS" != "0" ]; then mail -s "ERROR executing certbot" "$MAILTO" <<<"SYSTEMD status \n Service_result: $SERVICE_RESULT \n Exit_code(systemd): $EXIT_CODE \n Exit_status(proc exit code): $EXIT_STATUS\n`journalctl --no-pager -n 20 -u certbot`"; fi'
EOF

systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)

最后但并非最不重要的一些意见(另请阅读https://www.worthe-it.co.za/blog/2017-11-07-error-reporting-from-your-systemd-automation.html中的评论)

这是另一个典型的 systemd 不尊重 Linux 传统的例子。我认为应该有一种方法可以回退到旧 cron 的行为。另一方面,cron 的态度对于某些人来说可能不是最合理的。如果 systemd 为管理员提供配置选项以选择邮件输出,那就更好了。