CentOS7中rc.local中的指令不能生效問題。
問題:
在系統中/etc/rc.local設定自啟動命令的時候,重啟計算機,檔案中的指令無法生效。
我這裡編譯安裝了一個mongodb資料庫的服務,然後修改了環境變數。寫入到了.bash_profile 檔案中,在shell中可以直接執行命令。
檢視檔案,檔案的命令也是正確的
重啟後指令無法生效
一、在總結問題之前,先要搞明白幾個檔案的作用。
rc.local
路徑/etc/rc.d/rc.local或/etc/rc.local(軟連線檔案)
作用:用來開機自啟動一些指定指令。
./.bash_profile:
路徑:每個使用者的根目錄下的隱藏檔案;
作用,用來設定該使用者的環境變數,個人設定,設定之後只能自己使用。
/etc/profile:
路徑:/etc/profile
作用:用來設定所有使用者的環境變數,整體設定,設定完成後,所有使用者皆可以使用
二、查詢產生問題的因素。
在linux中,一個檔案出現了問題,首先應該檢視檔案的完整性和檔案的許可權。(個人習慣)。
(1)啟動時,檔案的執行先後。
我這裡雖然修改了環境變數,但是,當計算機啟動的時候,/etc/rc.local檔案是先於/etc/profile或.bash_profile檔案執行的。
所以,我這裡得命令應該使用絕對路徑的形式。(which mongod)。
(2)檔案的執行許可權。
檢視軟連線檔案:
大多數人會在這裡出現問題,因為這裡顯示的是擁有可執行許可權的。這個檔案的最終執行還是要到/etc/rc.d/rc.local檔案那裡執行,所以我們需要看的檔案許可權應該是原始檔。
從這裡可以看出,檔案根本就沒有執行許可權,所以說當計算機開機的時候,這個檔案也不會去執行。
三、解決辦法
(1)執行命令的時候,將命令寫為執行檔案的絕對路徑
(2)給/etc/rc.d/rc.local檔案附加上可執行許可權
chmod +x /etc/rc.d/rc.local
完成之後重啟就可以了。
四、總結
這個問題的出現,一是因為/etc/rc.d/rc.local沒有了執行許可權(版本問題,看情況以後可能會捨去這個檔案)。二是沒有認清/etc/rc.d/rc.local檔案和/etc/profile檔案的執行先後。通過修改檔案許可權和指令執行方法即可解決。
其實在這裡,細心的同學可能會注意到/etc/rc.d/rc/local檔案中的註釋
人家已經說得明白的啦。
都怪我英語太差啊,看到英語略過。。。。