结合systemd在服务已下线时通过Gotify进行通知
服务器上有一些重要服务若下线则需马上进行处理,用systemd
中的OnFailure
结合Gotify
能同时兼顾轻量和迅速的优点。
安装Gotify
关于Gotify的优缺点和部署方法可参考这篇文章。
设置gotify-warning服务
创建/etc/systemd/system/gotify-warning@.service
文件。注意其中的@
说明这是一个模板服务,可生成多个实例。
1 | [Unit] |
其中%H
为hostname
,%I
为服务名称。
由于此服务是按需触发,故无需enable。
编辑相关服务的配置文件
在[Unit]
下添加一行OnFailure=gotify-warning@%n
。其中%n
是该服务名。
以某个服务为例:
1 | [Unit] |
这里Restart=on-failure
为程序下线时自动重启程序,且重启间隔为10秒。但有时重启也不能解决问题,故要用StartLimitBurst
对重启次数进行限制,然后StartLimitIntervalSec
是总监控时长,这里为50秒内重启3次以上就停止重启。最终触发OnFailure
调用服务gotify-warning@qqbot.service
给手机发出通知。
注:StartLimitIntervalSec
是systemd v230
后的版本才有的功能,某些古早CentOS(7.x)仅支持StartLimitInterval
且要放在[Service]
处。
设定StartLimitIntervalSec
时不仅要求其大于StartLimitBurst*RestartSec,还要加上程序正常启动直至崩溃的时间。以上为例:若该程序启动后10秒才崩溃,则3*(10+10)=60>50,则永远不会超出限制并触发OnFailure
。此时应将StartLimitIntervalSec设为70甚至90更为合理。
参考资料
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 名实合为!
评论