0%

Linux创建开机启动服务

需求

使用linux离不开ss,每次都需要手动输入命令开启,很麻烦,所以需要创建开机就启动的服务。

前提

假设我们有一段需要开机启动的服务脚本/home/username/document/ss-local.sh如下

1
ss-local -c /home/username/document/ssconfig.json

创建服务(两种方式)

1. 创建成系统服务

然后在/etc/init.d/新建ss-local文件,注意这个文件的写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/sh
### BEGIN INIT INFO
# Provides: ss-local // 名字要和文件名一样
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: local shadowsocks service
### END INIT INFO

set -e

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin

. /lib/lsb/init-functions

NAME=ss-local
DEAMON=/home/username/document/ss-local.sh # 注意设置正确的脚本路径

start_sslocal() {
start-stop-daemon --start --background --name $NAME --exec $DEAMON
}

stop_sslocal() {
start-stop-daemon --stop --name $NAME
}

case "$1" in
start|"")
start_sslocal
;;
restart|reload|force-reload)
stop_sslocal
;;
stop)
exit 0
;;
*)
esac

将文件的权限置为755

1
sudo chmod 755 ss-local

将服务文件设置为开机启动

1
sudo update-rc.d ss-local defaults

启动服务

1
sudo systemctl start ss-local

2. 创建成systemd服务

定位到/usr/lib/systemd/system目录(如果没有就新建),新建ss-local.service。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
#定义描述
Description=The ss-local service
#指定了在systemd在执行完那些target之后再启动该服务
After=network.target remote-fs.target nss-lookup.target

[Service]
#定义Service 的运行type,一般是forking,就是后台运行
Type=simple
#以下定义systemctl start |stop |reload *.service 的每个执行方法,具体命令#需要>写绝对路径
ExecStart=/home/fan/Documents/ss/ss-local.sh
#创建私有的内存临时空间
PrivateTmp=true

[Install]
WantedBy=multi-user.target

然后就可以设置开机启动了

1
2
3
4
# 开机启动
sudo systemctl enable ss-local.service
# 启动服务
sudo systemctl start ss-local.service