在CentOS7中,實現開機啟動程序主要有兩種方法:
1)把要啟動的程序配置成自定義的系統服務,該方法我已經介紹過,請閱讀:CentOS7添加自定義系統服務。
2)在/etc/rc.local腳本文件中編寫啟動程序的腳本,本文將詳細介紹這種方法。
1、/etc/rc.local是/etc/rc.d/rc.local的軟鏈接
執行ls -l /etc/rc.local
看看。
/etc/rc.local是/etc/rc.d/rc.local文件的軟鏈接,也就是說他們是同一個文件。
2、rc.local文件的原始內容
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
#
touch /var/lock/subsys/local
中文意思如下:
# 添加此文件是為了兼容。
# 強烈建議創建自己的systemd服務或udev規則,以便在引導期間運行腳本,而不是使用此文件。
# 與以前版本不同,由於在引導期間並行執行,此腳本不會在所有其他服務之后運行。
# 請注意,必須運行'chmod+x/etc/rc.d/rc.local',以確保在引導期間執行此腳本。
明白了吧。
雖然Linux強烈建議采用自定義的系統服務實現開機自啟動程序,不過我認為在rc.local中配置開機啟動程序也是一個不錯的方法,因為rc.local的配置更簡單明了,所以仍被廣泛的使用。
3、rc.local文件的配置
rc.local本質上是一個shell腳本文件,可以把啟動時需要執行的命令寫在里面,啟動時將按順序執行。
接下來我們來測試它。
1)在rc.local中添加以下腳本。
/usr/bin/date >> /tmp/date1.log # 把當前時間追加寫入到/tmp/date1.log中。
/usr/bin/sleep 10 # 睡眠10秒。
/usr/bin/date >> /tmp/date2.log # 把當前時間追加寫入到/tmp/date2.log中。
2)修改/etc/rc.d/rc.local的可執行權限。
chmod +x /etc/rc.d/rc.local
3)重啟服務器。
4)查看日志文件/tmp/date1.log和/tmp/date2.log的內容。
4、應用經驗
1)rc.local腳本在操作系統啟動時只執行一次。
2)環境變量的問題。
在rc.local腳本中執行程序時是沒有環境變量的,如果您執行的程序需要環境變量,可以在腳本中設置環境變量,也可以用su切換用戶來執行,例如:
su - oracle -c "sqlplus scott/tiger @/tmp/test.sql"
以上命令的含義就是以oracle用戶登錄再執行sqlplus命令。
3)不要讓rc.local掛起。
rc.local是一個腳本,是按順序執行的,執行完一個程序后才會執行下一個程序,如果某程序不是后台程序,就應該加&讓程序運行在后台,否則rc.local會掛起。
可以用以下腳本來測試,rc.local的內容如下:
/usr/bin/date >> /tmp/date1.log # 把當前時間追加寫入到/tmp/date1.log中。
/usr/bin/sleep 100 # 睡眠100秒。
/usr/bin/date >> /tmp/date2.log # 把當前時間追加寫入到/tmp/date2.log中。
如果采用了以上腳本,Linux系統在啟動完成100后,才會出現以下的登錄界面。
5、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道