一、systemd实现进程守护

rhel7/centos7 、SUSE12等主流版本都使用systemd,这里结合systemd的一个功能,了解下其优势。比如我们经常部署的业务守护进程,在systemd里,其自身就已经实现了该功能,只需要把参数加下就OK了。这里以vsftpd为例。如何保证其在异常的时候自动进行拉起。打开/usr/lib/systemd/system/vsftpd.service 文件或 /etc/systemd/system/multi-user.target.wants/vsftpd.service 文件,在[Service] 项增加如下内容:

1Restart=always
2RestartSec=10s

Restart=always 项就是进行守护,使用always参数的意思是在该进程非常正常退出或被kill等情况下会主动进行重启;

RestartSec=10s 项表示重启前等待10妙,默认是100毫秒,加这个值的原因是一些进程启的会比较慢,避免还未启动,系统重复启动。

效果见下图:

systemd-always
systemd-always

等了10秒,被kill的进程自动拉起了。

二、其他

systemd服务的可配置项比较多,比如:

  • ExecStartPre 是启动服务之前执行的命令,
  • ExecStartPost 是启动服务之后执行的命令

使用systemd.timer实现类似于crontab的功能等。

更多用法,可以去redhat或SUSE官方查看文档,或者查看国内金步国译的 systemd.service 中文手册