开机自启动

开机自启动

创建自启动脚本,在其中写入需要的命令

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash### BEGIN INIT INFO
# Provides: xxx.sh
# Required-start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the xxx.sh daemon
# Description: starts xxx.sh using start-stop-daemon
### END INIT INFO

#command
write your command here!

将脚本放到 /etc/init.d中,赋予777权限(好像755权限就够了)

然后执行一下命令:

1
2
cd /etc/init.d
sudo update-rc.d xxx.sh defaults 95

其中 xxx.sh 为脚本名称, 95为启动顺序,需要网络的可以放到最后启动,也就是99。

如果有多个开机启动脚本,需要注意把启动顺序错开,如果使用同一个数字,也会造成冲突。有的无法启动成功。

卸载开机启动项

1
2
cd /etc/init.d
sudo update-rc.d -f svnd.sh remove

开机使用screen启动脚本

以启动shadowsocks为例,步骤如上,但是脚本要如此写:

1
2
3
4
5
6
7
8
9
10
11
12
#!bin/bash
#!/bin/bash### BEGIN INIT INFO
# Provides: ss.sh
# Required-start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the ss.sh daemon
# Description: starts ss.sh using start-stop-daemon
### END INIT INFO
screen -dmS shadowsocks
screen -r shadowsocks -X stuff $'sslocal -c /etc/shadowsocks.json\n'

$是为了能够解析换行符。这里换行符的作用相当于enter,如果没有\n则只是将command送进screen但是并没有运行。

注意,shadowsocks需要在root权限下安装,不然会找不到sslocal命令。

由于在root权限下安装后shadowsocks后,会在/etc/init.d下出现shadowsock文件,在这种情况下如果把启动脚本命令为shadowsocks.sh,好像会出现冲突导致无法启动。我将脚本名称改成ss.sh后,可以正常开机启动。

references

ubuntu下设置开机自启动项

How to create a screen, executing given command?

ubuntu 16.04 svn开机启动的两种方法