笔者总结Linux设置开机启动的三种方法。
1、用 cron 规划开机任务
cron 在系统中有一个运行着的守护进程,当系统时间符合某一条规划记录时, 守护进程就会启动相应的任务。可以通过crontab -e来查看任务,参考笔者以前的文章-Linux crontab定时任务详细分解 可以详细了解。
sudo crontab -e -u root可以修改root用户的crontab,换成其他用户就可以修改对应的crontab。
在这里,使用@reboot 选项来设置开机启动。比如开机执行下面的health-check.sh脚本。
@reboot /root/health-check-script/health-check.sh &
2、使用/etc/rc.local
/etc/rc.local文件可以在开机时执行用户自定义的任务,查看文件内的说明信息:This script is executed at the end of each multiuser runlevel。Make sure that the script will "exit 0" on success or any other value on eror。
这个文件是系统初始化的末尾执行的一个脚本,启动任务需要加在“exit 0”之前。rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。但是太多的任务加入这个脚本中, 不但会拖慢开机速度, 还会造成管理上的混乱。如果要想随开机启动某些服务,应该使用第三种方法。
3、使用/etc/init.d 实现开机启动
/etc/init.d文件夹包含很多脚本,作用是把进程包装成了一个服务, 定义了它在启动、 重启和终止时的具体行为,用户在启用相应服务时, 就不用进行太复杂的设置。比如service mysql restart/stop/start/status来开启、停止和查看数据库mysql的状态。我们来看一下rc3.d(即命令行模式)目录:
/etc/init.d/mysql 还不能随开机启动,Linux 在开机启动时, 真正检查的是/etc/rcN.d文件夹, 执行其中的脚本, 这里的 N 代表了运行级别。需要把中的服务复制到或者建立软连接到/etc/rcN.d 上, 才能让该服务在 N 运行级别开机时启动。不过, 我们可以利用update-rc.d 命令更方便地进行。
如在默认的运行级别建立软链接:
update-rc.d mysql defaults
删除默认运行级别下的软链接:
update-rc.d cron remove
在笔者以前的文章-linux中/etc/init.d设置开机启动,可以使用chkconfig工具来具体设置启动级别的启动。关于运行级别,可以参考笔者的文章-Linux运行级别简介。
4、建立startup.d目录,使其开机遍历执行下面的脚本
从/etc/profile文件得到灵感,建立脚本或者服务startup,用上面的三种方法来开机启动startup,然后读取/home/root/startup.d目录下的脚本,遍历执行目录下的脚本,这样就可以将需要开启启动的脚本放置于这个目录下,方便使用与维护。
脚本或服务内容为:if [ -d /home/root/startup.d ]; then
for i in /home/root/startup.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
还有笔者看到网络上在Linux环境变量文件里面来设置开机启动,但是笔者觉得不可取,会造成管理混乱,而且有些环境变量文件不止在开机启动,会在bash运行时启动一次。所以环境文件是每次登陆shell前自动执行一些命令、在文件中创建命令或者创建自定义快捷命令组合,不适合用于开启启动。