本文以 Shadowsocks 为例,如何使用 Systemd 为 Shadowsocks 添加开机启动,

安装 Shadowsocks

首先是下载 Shadowsocks

1
apt-get install shadowsocks

安好shadowsocks后,使用

1
ssserver -k mypass

这样就启动了一个 Shadowsocks 前台程序,即程序会占用终端的输出。当然可以使用ssserver -k mypass -d start自带的daemon后台程序托管Shadowsocks,但是本文的目的是使用Systemd来管理Shadowsocks并实现开机自动启动。

使用 Systemd 托管 Shadowsocks

想要成为Systemd 一个服务,可以通过在其指定目录下添加 systemd单元配置文件,即在
/usr/lib/system.d/system/etc/system.d/system 目录添加
ss.service文件即可,ss则是这个服务的服务名

添加服务单元配置文件,首先需要一个systemd配置文件的模板,这里以ssh.service为例,复制一份ssh.service的模板再修改我们所需要的

1
systemctl cat ssh.service > /usr/lib/system.d/system/ss.service

修改完毕的ss.service…

1
2
3
4
5
6
7
8
9
10
11
12
# /lib/systemd/system/ss.service
[Unit]
Description=Shadowsocks Service
After=network.target

[Service]
ExecStart=/usr/bin/ssserver -k mypass
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

然后重新加载一下配置

1
systemd daemon-reload

查看已经加载的服务

1
systemctl status ss.service

可以看到目前是inactive的,即还没有启动,现在启动这个服务

1
systemctl start ss.service

现在还没有设置开机启动,可以看到状态是disabled

设置开机启动

使其开机自动启动

1
systemctl enable ss.service

现在用systemctl status ss.service查看状态可以看到ss服务正在运行,并且最下方是它的日志

维护Shadowsocks - 访问 Shadowsocks 日志

如果遇到一些奇怪的情况,客户端使用这个ss服务器并没有效果,这时候需要借助Shadowsocks 日志来确定问题的所在。
除了用systemctl status ss.service 查看其部分日志,还可以使用更方便的查看日志的命令组jouralctl

查看ss这个服务的日志:

1
jouralctl -u ss

如果忘记这个服务名了,查看所有日志试试看

1
jouralctl -xe

如果只记得服务名中含有s这个单词,使用s查找服务名
列出服务状态

1
systemctl list-unit | grep s 或 systemctl | grep s

列出服务开机是否启动

1
systemctl list-unit-file --type=service | grep s

PS.

  • /usr/lib/systemd/system/ :软件包安装的单元
    – 注解: Ubuntu 还有 /lib/systemd/system/
  • /etc/systemd/system/:系统管理员安装的单元,开机启动的单元目录

开机时间小助手

1
2
systemd-analyze blame #查看各个服务的开机启动时间
systemd-analyze plot > boot.svg #导出开机时间图