将Centos7可执行程序自定义为系统服务


CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,因为我们配置的绝大多数脚本都不需要登陆系统才能运行,所以基本都是放在/usr/lib/systemd/system下。


每一个服务以.service结尾,我们打开/usr/lib/systemd/system会发现很多以.service结尾的程序文件,其实只要复制一个然后编辑,就很容易写一个服务。以现在我们经常会用来科学上网的shadowsocks来说,我们安装完 shadowsocks后,需要用

ssserver -c /etc/shadowsocks.json -d start 

这样的命令来启动服务,如果需要开机启动,除了加入rc.local,我们将它转化为系统服务无疑是更方便操作。


我们新建一个shadowsocks.service然后编辑:

[Unit]
Description=shadowsocks
After=this is a shadowsocks service

[Service]
Type=forking
PIDFile=/run/shadowsocks.pid
ExecStart=/usr/bin/ssserver -c /etc/shadowsocks.json -d start
ExecReload=/usr/bin/ssserver -c /etc/shadowsocks.json -d restart
ExecStop=/usr/bin/ssserver -c /etc/shadowsocks.json -d stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

[Unit]部分很简单,是对服务的说明,Description用于描述服务,After用于描述服务类别,这部分其实怎么写都行。

[Service]是要注意的地方,PIDFile为程序PID的路径,其实没定义的服务程序运行后会自动在/run目录生成一个同名的pid文件。ExecStart,ExecReload,ExecStop分别对应程序的启动、重启与停止,这个也很好理解,需要注意的是,此处应该写文件的绝对路径。比如本来可以直接运行

ssserver -c /etc/shadowsocks.json -d start

来启动服务,在此处要写ssserver命令的绝对路径/usr/bin/ssserver。

PrivateTmp=True表示给服务分配独立的临时空间

[Install]部分是服务安装的相关,可设置为多用户。

以754的权限保存后,即可通过

systemctl start/stop/restart/enable/disable shadowsocks 

来启动或停止服务以及配置开机启动。

推广推荐

Proudly powered by WordPress | IEWB.NET 2009-2021 版权所有