MENU

如何把Centos7可执行程序自定义为系统服务

February 10, 2022 • 已被 205 位童鞋围观过 • 系统运维

最近在玩Plex+xTeve 搞IPTV,虚拟机的空间有限。又不想搞docker 所以就直接裸机跑 linux直接加xteve开搞。
但是不清楚怎么把程序搞成系统服务 开启自启。所以百度了一下,以下内容为搬运 测试成功
systemctl的使用相比以往系统服务的/etc/init.d的启动脚本的方式变动也比较大,但变的更简单更易用了,同firewalld一样,运行原理一目了然,对于初学者来说,只要做过一两次练习,就能适应各种生产环境。

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,我们将它转化为系统服务无疑是更方便操作。

  • 我们在 /usr/lib/systemd/system 新建一个xteve.service然后编辑:
[Unit]
Description=xTeVe
After=network-online.target

[Service]
ExecStart=/root/xteve 

KillMode=process


[Install]
WantedBy=multi-user.target
 

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

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

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

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

以754的权限保存后,即可通过systemctl start/stop/restart/enable/disable shadowsocks 来启动或停止服务以及配置开机启动。

Last Modified: September 28, 2023