Linux開機啟動程序rc.local


在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

作者:碼農有道


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM