起因
Ubuntu-16.10(不包括)之前的版本使用的是update-rc.d
以及rc.local
等方法设置开机启动,Ubuntu-16.10(包括)之后的版本,开始不再使用initd
管理系统,改用systemd
。
设置方法
1、修改rc.local.service
文件添加install
段
nano /lib/systemd/system/rc.local.service
检查是否有install
段,如果没有在最后添加,添加后如下效果
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
以上启动文件内容简介
[Unit] 段: 启动顺序与依赖关系
[Service] 段: 启动行为,如何启动,启动类型
[Install] 段: 定义如何安装这个配置文件,即怎样做到开机启动
[Unit] 段: 启动顺序与依赖关系
[Service] 段: 启动行为,如何启动,启动类型
[Install] 段: 定义如何安装这个配置文件,即怎样做到开机启动
2、创建/etc/rc.local
文件
Ubuntu-18.04 server 版默认是没有/etc/rc.local
这个文件的,需要自己创建
sudo touch /etc/rc.local
然后把你需要启动脚本写入/etc/rc.local
,我们不妨写一些测试的脚本放在里面,以便验证脚本是否生效.
echo "this just a test" > /usr/local/text.log
记得给加上执行权限:
sudo chmod +x /etc/rc.local
做完这一步,还需要最后一步 前面我们说systemd
默认读取/etc/systemd/system
下的配置文件, 所以还需要在/etc/systemd/system
目录下创建软链接
ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/
OK, 接下来,重启系统,然后看看 /usr/local/text.log 文件是否存在就知道开机脚本是否生效了。