月度归档:2017年05月

使用 Supervisor 自制开机自启动后台服务

使用 Supervisor 自制开机自启动后台服务

写在前面的废话

这几天在了解了一些关于 kcptun 相关的信息(耀华同学科普的),想着近期自己的 VPS 科学上网方案时不时的抽风,就上手折腾了一番。但是作为一个仅仅会照着官方文档执行一些命令的我,对于很多 Linux 服务器运维相关的知识知之甚少,原来因为身边总是有耀华同学,搞不定直接把问题丢给他就好了,可是现在更多的时候得靠自己了。

然后找到耀华同学了解了一番如何在 Linux 服务器上自制一个开机自启动服务,最终选择了耀华同学推荐的 Supervisor。废话到这,下面开始折腾。

安装 Supervisor 服务

在做一件自己以前从未做过的事情之前,建议大家还是自备一个不会影响到其他人和自己的虚拟机进行学习和测试,相信我,你总有可能做出一些自己难以预测而破坏性又大的事情的。记住,不要因为自己的无知,影响到他人和自己,否则你会因为这个后果自己承担不起或者恼怒不已,最终你会把锅扣在你正要开始学习的事物上,这对于我们开始一项新的学习无疑毫无益处。

我们歌王同学刚好今天在公司内网新建了一台全新的 CentOS 的虚拟机,我刚走过去想问问能否给我一台仅供我自己折腾使用的服务器,歌王就把用户名和密码给我了,简直贴心到爆啊,有木有,有这样的同事,也是我修来的福分好伐。

其实我想要的最好是一台 Ubuntu 服务器啦,毕竟讲真,对于我这样的菜鸟服务器管理员,Ubuntu 总感觉可用度更高些(各种问题 Google 一下,马上出来),大部分流行的工具在官方的软件库里头都能找到,确实能省不少的事情,降低了维护的难度和成本。不过看了一眼 Supervisor 官方文档,感觉这货在各大 Linux 的发行版上都如鱼得水呢,毕竟它是用 Python2 实现的嘛,那么 CentOS 就 CentOS 吧,我总不能再要求我们歌王同学再给我去搞一个 Ubuntu 的虚拟机吧(我们公司后端使用的服务器均是 CentOS)。

通过 easy_install 直接安装 Supervisor,执行以下命令:

easy_install supervisor

即可安装 Supervisor,安装成功之后,可以执行以下 supervisord,测试一下是否安装成功,确认安装成功之后,我们就可以继续下一步了,编写开机自启动后台服务的配置。

编写开机自启动后台服务的 Supervisor 配置

编辑 /etc/supervisord.conf 文件(如果没有的话,执行 echo_supervisord_conf > /etc/supervisord.conf 创建该配置文件),在文件末尾新增以下配置:

[program:ss-proxy-kcptun-sg]
command=/root/kcptun/client_linux_amd64 -c /root/kcptun/ss-kcptun-config-sg.json

就是这么简单,Supervisor 默认的选项已经完全够用了,重新执行命令 supervisord -c /etc/supervisord.conf,然后我们就可以通过命令 ps aux | grep kcptun 来确认 kcptun 的 client 是否已经随着 supervisord 的启动自动启动了。

配置 Supervisor 开机自启动

通过上面的步骤,我们已经可以让 kcptun 的 client 随着 supervisord 的启动自动启动了,但是 supervisord 的开机自启动还得做一下设置(由于我这里是通过 easy_install 来安装的,貌似这货不会自启动),也许使用 yum 直接安装 Supervisor 会自动启动噢。我在 Ubuntu 上使用 apt 安装的 Supervisor 确实是会自动启动的(而且其默认的配置文件在 /etc/supervisor/supervisord.conf 这里噢)。

至于如何在不同的系统下设置 Supervisor 的开机自启动,在 Supervisor 的官方文档上有这么一句噢:

If you are using a distribution-packaged version of Supervisor, it should already be integrated into the service management infrastructure of your distribution.

There are user-contributed scripts for various operating systems at: https://github.com/Supervisor/initscripts

There are some answers at Serverfault in case you get stuck: How to automatically start supervisord on Linux (Ubuntu)

我现在的操作系统是 CentOS,所以我就从这个 Supervisor 的官方 Github 账号下的一个用户们分享的启动脚本的仓库中,下载了适用于 CentOS 的启动脚本,从文件的命名以及脚本内容的风格来看,这货是一个用于 systemd 启动的配置呢。

所以我就 Google 了一番,关于如何在 CentOS 上创建 systemd 的启动脚本,这里有完整的在 CentOS(实际上是 Redhat 啦,不过我们都晓得 CentOS 师出 Redhat 门下,同根同源,不会错的) 上创建一个自定义的 systemd 的启动脚本的流程。以下是我执行的所有脚本的流程:

curl https://raw.githubusercontent.com/Supervisor/initscripts/master/centos-systemd-etcs > supervisord.service
mv supervisord.service /etc/systemd/system
chmod 644 /etc/systemd/system/supervisord.service
systemctl daemon-reload
systemctl start supervisord.service

此后如果修改了 Supervisor 使用到的相关配置,需要重启 Supervisor 服务的话,执行 systemctl restart supervisord.service 即可。