linux有很多种自启动方式,这里只是简单记录下update-rc.d的自启动方式
update-rc.d的介绍
update-rc.d命令用于安装或移除System-V风格的初始化脚本连接。脚本是存放在 /etc/init.d/目录下的,我们可以直接在/etc/init.d/目录下创建执行脚本,然后在rcN.d或者rcS.d中创建软链接,系统启动时会从rcS-rc0…rc6顺序启动文件夹里的启动脚本
在/etc/目录下存在如下八个文件夹,7个rcN和一个rcS
liuge@liuge-VirtualBox:/etc$ ls | grep rc
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rcS.d
rcN
0(关闭系统)
1(单用户模式,只允许root用户对系统进行维护。)
2 到 5(多用户模式,其中3为字符界面,5为图形界面。)
6(重启系统)
init [0123456Ss]
例如:init 0 命令关机; init 6 命令重新启动
每个文件夹中都包含S与K开头的软链接,S代表启动,K代表结束,S-NN-name,NN代表调度优先级,越低越高,name代表init.d里脚本的名字
例如rc2.d中如下
liuge@liuge-VirtualBox:/etc$ ls rc2.d/
K01speech-dispatcher S01cups-browsed S01rsync
S01acpid S01dbus S01rsyslog
S01anacron S01gdm3 S01saned
S01apport S01grub-common S01spice-vdagent
S01avahi-daemon S01irqbalance S01unattended-upgrades
S01bluetooth S01kerneloops S01uuidd
S01console-setup.sh S01openvpn S01whoopsie
S01cron S01plymouth
S01cups S01pulseaudio-enable-autospawn
首先查一下当前linux版本中update-rc.d的支持情况
liuge@liuge-VirtualBox:/etc/init.d$ update-rc.d --version
update-rc.d: error: unknown option
usage: update-rc.d [-f] <basename> remove
update-rc.d [-f] <basename> defaults
update-rc.d [-f] <basename> defaults-disabled
update-rc.d <basename> disable|enable [S|2|3|4|5]
-f: force
The disable|enable API is not stable and might change in the future.
可以看到当前版本建议使用前三个命令
update-rc.d完成自启动
使用update-rc.d命令完成自启动
- 编写脚本,添加如下头部信息
这里包含了启动命令所需要的level以及依赖等
#!/bin/bash
### BEGIN INIT INFO
# Provides: test
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start test
# Description: start test
### END INIT INFO
cd /home
touch mytest.txt
echo "hello world" >> /home/mytest.txt
- 将该脚本拷贝到/etc/init.d中
- cd /etc/init.d ,运行sudo update-rc.d name defaults, 该命令会根据前者脚本所写信息,分别将启动和终止的软链接添加到rcN.d中
liuge@liuge-VirtualBox:/etc/init.d$ sudo update-rc.d mystart defaults
lrwxrwxrwx 1 root root 17 11月 30 14:00 S01mystart -> ../init.d/mystart
- 完成
手动添加自启动脚本
- 同上,将启动脚本添加到/etc/init.d中,这里的脚本可不需要之前脚本的前缀内容
- 手动选择在rcS或者rcN.d中添加软链接
liuge@liuge-VirtualBox:/etc/rc2.d$ sudo ln -s ../init.d/test_bf.sh S02test_bf
lrwxrwxrwx 1 root root 20 11月 30 14:01 S02test_bf -> ../init.d/test_bf.sh
- 完成