Brief guidance to linux systemd configuration

Brief guidance to linux systemd configuration

Notice: This article is only available in Chinese version. :(


习惯了诸如 " systemctl {start|status|stop|enable|disable} httpd " 等类似的命令?在Linux中如何将普通的应用程序设置成服务?
这里以 frp client 为例,实现在 Ubuntu 18.04 上的普通的应用程序添加进守护进程以方便配置自启动。

配置service文件

在应用程序的安装或配置位置,新建一个 frpc.service ,然后再来按照区块编辑这个文件:

Unit

负责服务的描述,启动顺序和依赖关系。
BeforeAfter 定义服务的启动顺序(在某个程序之前或之后)。 require 要求某个服务启动成功,否则不会启动该自定义服务,而 Wants 则不会终止该自定义服务的启动。

[Unit]
Description=Frp client daemon
After=network.target network-online.target syslog.target
Wants=network.target network-online.target
Service

Exec* 字段定义服务状态改变前后需要执行的命令:

字段 触发时
ExecReload 重启服务时执行
ExecStop 停止服务时执行
ExecStartPre 启动服务之前执行
ExecStartPost 启动服务之后执行
ExecStopPost 停止服务之后执行

eg1

[Service]
Type=simple
ExecStart=/etc/frp/frpc -c /etc/frp/frpc.ini
Restart=always

eg2

[Service]
Type=forking
PIDFile=/var/run/shadowsocks/server.pid
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p /var/run/shadowsocks
ExecStartPre=/bin/chown root:root /var/run/shadowsocks
ExecStart=/usr/local/bin/ssserver --pid-file /var/run/shadowsocks/server.pid --log-file /var/log/shadowsocks.log -c /etc/shadowsocks/config/server.json -d start
Restart=always
RestartSec=24h
User=root
Group=root
UMask=0027

WantedBy 定义服务随何目标启动。下面列出常用目标

目标 描述
muti-user.target 启动至 init 3 时执行
graphical.target 启动至 init 5 时执行
reboot.target 启动至 init 6 时执行
[Install]
WantedBy=multi-user.target

修改文件权限(如果需要):

chmod 755 /etc/frp/frpc.service

Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。

使用软连接将刚才建立的service文件指到 " /usr/lib/systemd/system " 内:

ln -s /etc/frp/frpc.service /usr/lib/systemd/system

最后,更新Ubuntu Service守护进程:

systemctl daemon-reload

使用 systemctl 命令操作进程:

设置开机自启:

systemctl enable shadowsocks

启动 Shadowsocks 进程

systemctl start shadowsocks

结束 Shadowsocks 进程

systemctl stop shadowsocks

重启 Shadowsocks 进程

systemctl restart shadowsocks

查看 Shadowsocks 进程运行状态

systemctl status shadowsocks

参考:

  1. Systemd 入门教程:实战篇
  2. x11vnc对于Ubuntu15.04以后和Ubuntu14.04以前的配置和开机自启
  3. CentOS7以root权限开机自启动程序设置详解教程 - 百度文库
  4. 最简明扼要的 Systemd 教程,只需十分钟