![当 svcadm 重新启动已终止的服务时如何收到通知](https://linux22.com/image/27865/%E5%BD%93%20svcadm%20%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E5%B7%B2%E7%BB%88%E6%AD%A2%E7%9A%84%E6%9C%8D%E5%8A%A1%E6%97%B6%E5%A6%82%E4%BD%95%E6%94%B6%E5%88%B0%E9%80%9A%E7%9F%A5.png)
我正在使用 svcadm 来保持我的 node.js 服务器在 Illumos 上运行,如果 svcadm 由于崩溃而重新启动服务器,是否有办法收到通知?特别是如果该进程自行关闭而不是在我重新启动它时。
我想要运行一个脚本,以便我可以发送电子邮件或发出警报。
答案1
在 Solaris 11 上,您可以让 SMF 守护程序通知您服务状态更改:
但我不确定 illumos 是否具有该功能,因为它是 SMF 后来添加的。
在任何带有 SMF 的版本中,如果您使用脚本而不是直接从 SMF 清单中直接调用程序,那么您始终可以在 SMF 服务的启动方法中放置发送电子邮件/通知的命令。
答案2
每个服务都有自己的日志。您可以通过执行以下操作来检查您的服务的日志是什么,例如我正在使用 ssh:
#svcs -xv ssh
svc:/network/ssh:default (SSH server)
State: online since Tue Nov 27 11:38:34 2012
See: man -M /usr/share/man -s 1M sshd
See: /var/svc/log/network-ssh:default.log
Impact: None.
现在您可以拥有自己的脚本(假设在 crontab 中)来检查日志文件上的更改。第二种方式,我想这实际上是最好的一种,您可以更改启动脚本,无论何时启动,它都会自动向您发送一封电子邮件。
要找出启动脚本所在的位置:
svccfg -s svc:/network/ssh
listprop
...
start/exec astring "/lib/svc/method/sshd start
...
现在只需编辑脚本,在启动之前您可以放置自动邮件通知
vi /lib/svc/method/sshd
搜索函数 start 并添加如下内容:
echo "Service ssh has been restarted!" |mailx -s "SSHD" user@mailbox
现在只需更新以匹配您的环境和服务。不漂亮但有效。