Reboot Task
最简单/etc/rc.local
默认是不开启的,文件/etc/rc.local
默认也不存在
开启/etc/rc.local功能
- ubuntu18.04不再使用initd管理系统,改用systemd
- systemd有rc-local的配置文件,只需链接到
/etc/systemd/system
目录下启动即可ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
使用/etc/rc.local功能
1 | touch /etc/rc.local |
crontab @reboot
1 | crontab -e |
initd 启动管理系统
- init.d目录包含许多系统各种服务的启动和停止脚本。它控制着所有从acpid到x11-common的各种事务。
- 注意:ubuntu18.04不再使用initd管理系统,改用systemd
编写脚本
/etc/init.d
目录下建立文件test
- 按照README编写脚本
- 赋予执行权限
sudo chmod +x /etc/init.d/test
设置脚本启动
方法一:使用update-rc.d 命令将脚本放到启动脚本中去(debian中可以使用更新的insserv):
1 | $ cd /etc/init.d |
注:其中数字95是脚本启动的顺序号,按照自己的需要相应修改即可。在你有多个启动脚本,而它们之间又有先后启动的依赖关系时你就知道这个数字的具体作用了。更多说明建议看man update-rc.d。
方法二:手动在rc*.d中建立软连接
1 | $ ls -s test ../rc5.d/S95test |
rc*.d
,*代表启动级别,在不同启动级别启动,
K开头的脚本文件代表运行级别加载时需要关闭的,
S开头的代表相应级别启动时需要执行,
数字代表顺序
卸载启动脚本的方法:
1 | $ cd /etc/init.d |
手动调用脚本
1 | /etc/init.d/test start |
systemd 服务管理系统
使用sudo systemctl enable xxx
1 | systemctl is-enabled servicename.service #查询服务是否开机启动 |
systemctl 开机启动原理
- Systemd 默认从目录
/etc/systemd/system/
读取配置文件。 - 但是,里面存放的大部分文件都是符号链接,指向目录
/usr/lib/systemd/system/
,真正的配置文件存放在那个目录。
systemctl enable
命令用于在上面两个目录之间,建立符号链接关系。
1 | > $ sudo systemctl enable [email protected] |
- 如果配置文件里面设置了开机启动,
systemctl enable
命令相当于激活开机启动。 - 与之对应的,
systemctl disable
命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。1
2> $ sudo systemctl disable [email protected]
> - 配置文件的后缀名,就是该 Unit 的种类,比如
sshd.socket
。- 如果省略,Systemd 默认后缀名为
.service
,所以sshd
会被理解成sshd.service
。
- 如果省略,Systemd 默认后缀名为
把程序设置systemctl服务,并开机启动
进入目录/usr/lib/systemd/system
,修改webhook.service
1 | [Unit] |
这里有几个模块:
- [Unit] 区块:启动顺序与依赖关系。
- [Service] 区块:启动行为,如何启动,启动类型。
- [Install] 区块,定义如何安装这个配置文件,即怎样做到开机启动。
1 | systemctl start nexus.service #启动服务 |
Loaded: loaded (/etc/systemd/system/webhook.service; enabled;
这个enabled
就是开机启动的意思
需要进一步的研究学习
暂无
遇到的问题
暂无