Ubuntu18.04 systemd 设置服务异常退出自动重启

在运行一个服务时,会遇到程序因为内部出错,运行中止的情况。如果使用人工发现并且重启的方法,会很严重地影响服务的可用性,也增大了人工操作成本。

处理这个问题有多重方法,最简单的方法是使用 supervisor 这样的软件来运行服务,可以参考:http://supervisord.org

在 Unix/Linux 类的操作系统中,一般使用专门的服务管理软件调度服务进程,比较主流的有:System V 的 Init 系统、Upstart 和最新的 systemd。这些服务管理软件都有检测服务状态,当服务异常退出重启的功能。可以参考:https://www.digitalocean.com/community/tutorials/how-to-configure-a-linux-service-to-start-automatically-after-a-crash-or-reboot-part-1-practical-examples

由于我自己使用 Ubuntu,而 Ubuntu 最新的几个版本的服务管理软件为 systemd,所以我简单介绍一下 systemd 的异常退出重启配置方法。

systemd 的基本概念和使用方法可以参考:https://wiki.archlinux.org/index.php/Systemd,也有对应的简体中文版:https://wiki.archlinux.org/index.php/Systemd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

systemd 的操作很简单,基本为:

systemctl start|stop|reload|restart|status 服务单元名 用来开始、结束、重新载入、重启、查看服务。

systemctl enable|disable|is-enabled 服务单元名 用来设置和查看服务的开机启动状态。

systemd 的配置文件简单来说如下:

[Unit]
#简单介绍当前服务单元
Description=Shadowsocks multiple user server
#需要哪些服务单元启动后启动当前服务单元
Requires=network.target

[Service]
#服务的类型,一般都是 simple,具体可以看上面的参考网页
Type=simple
#告诉 systemd 如何启动服务。启动的服务应当为持续运行的服务,不要加后台运行的选项
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks/servers.json --pid-file=/tmp/ssserver.pid
#这是本文解决异常退出自动重启的方法,只要简单加一行
Restart=always

[Install]
WantedBy=multi-user.target

从上面的描述就知道了,服务异常退出重启,只需要在 systemd 的服务描述中添加 Restart=always 一行即可达到目的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

豌豆荚企业无线网络方案历程
Previous post
使用wget下载抓取保存整个网站所有内容
Next post