有時候我們需要Linux系統在開機的時候自動加載某些腳本或系統服務。在解問題之前先來看看Linux的啟動流程。
一、Linux的啟動流程
主要順序就是:
1. 加載內核
2. 啟動初始化進程
3. 確定運行級別
4. 加載開機啟動程序
5. 用戶登錄
啟動流程的具體細節可以看看Linux 的啟動流程
第4步加載啟動程序其實是兩步:
- init進程逐一加載開機啟動程序,其實就是運行指定目錄里的啟動腳本。
- 在運行完指定目錄里面的程序后init進程還會去執行/etc/rc.local 這個腳本。
ps:“指定目錄”是指在第3步中設置的運行級別對應的目錄。
要完成我們的需求,我們使用第4步中的任意一種方式都可以。
下面分別就是這兩種方式的具體實現:
二、chkconfig
1. 編寫腳本autostart.sh(這里以開機啟動redis服務為例),腳本內容如下:
#!/bin/sh #chkconfig: 2345 80 90 #description:開機自動啟動的腳本程序 # 開啟redis服務 端口為6379 /usr/local/service/redis-2.8.3/src/redis-server --port 6379 &
腳本第一行 “#!/bin/sh” 告訴系統使用的shell;
腳本第二行 “#chkconfig: 2345 80 90” 表示在2/3/4/5運行級別啟動,啟動序號(S80),關閉序號(K90);
腳本第三行 表示的是服務的描述信息
注意: 第二行和第三行必寫,負責會出現如“服務 autostart.sh 不支持 chkconfig”這樣的錯誤。
2. 將寫好的autostart.sh腳本移動到/etc/rc.d/init.d/目錄下
3. 給腳本賦可執行權限
cd /etc/rc.d/init.d/ chmod +x autostart.sh
4. 添加腳本到開機自動啟動項目中
chkconfig --add autostart.sh chkconfig autostart.sh on
到這里就設置完成了,我們只需要重啟一下我們的服務器,就能看到我們配置的redis服務已經可以開機自動啟動了。
三、修改/etc/rc.local腳本
末尾加入如下語句
/usr/local/service/redis-2.8.3/src/redis-server --port 6379 &
切忌 命令行末尾要加上 [ & ] 符號(介紹), 表示任務在后台執行。否則會阻塞后面添加的命令行執行。
完畢。
PS:
https://blog.csdn.net/karchar/article/details/52489572
https://blog.csdn.net/daidaineteasy/article/details/54864776
https://blog.csdn.net/chinabestchina/article/details/72686002