Skip to content


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

  题外话:自Centos7发布以后,因为没有ifconfig以及防火墙等一些基础命令的的变动,曾经看到centos7就有砸电脑的冲动,到现在能发现一些Centos7的优点,中间竟然经过了两年多的时间,很长一段时间内都是Centos6的拥护者。

除了对因为把ifconfig换成ip addr造成我所有的运维脚本失效还耿耿于怀外,其它的感觉它还真是一个不错的系统,先别是FirewallD,真是越来越喜欢,当然还有今天要写的Systemctl。

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

  我们新建一个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 来启动或停止服务以及配置开机启动。

Posted in 技术文章.

Tagged with .


2 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. 三五营销软件 says

    真是学无止境!

  2. 笑八达 says

    感受学习的力量!



Some HTML is OK

or, reply to this post via trackback.