Linux設定指令碼/服務開機自動執行/啟動
在非圖形化介面情況下,Linux開機自動執行/啟動的設定可以通過如下方法:
linux環境:CentOS Stream release 9
1. /etc/rc.local檔案
通過對於沒有被註冊為系統服務的指令碼如自行編寫的指令碼,可以通過在rc.local中新增相關指令碼路徑和名稱來開機自動執行
/etc/rc.local是指向/etc/rc.d/rc.local的一個指令碼,它是在系統初始化級別指令碼執行之後再執行;
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 thisfile. # # 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. sh /root/t.sh exit 0
sh /root/t.sh使用者自定義新增的執行指令碼命令,需要放在exit 0之前
實測只需新增指令碼絕對路徑地址和名稱也可,如下文啟動tomcat的命令一樣不加sh ./等執行。
t.sh內容如下:
#!/bin/sh touch /root/test.sh echo ttt > /root/test.sh
reboot後,檢視root下,已生成test.sh檔案且有內容ttt。
需要注意的是:
1.初次使用該指令碼時,需要給/etc/rc.d/rc.local賦予可執行許可權,rc.local註釋內容也已提到這一點,執行chmod +x /etc/rc.d/rc.local即可
2.該指令碼執行時,系統環境變數(如Java環境JDK等)還沒正常賦值,因此如是在rc.local裡只新增啟動tomcat的命令而不設定java環境變數是不會成功的
rc.local[910]: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
rc.local[910]: At least one of these environment variable is needed to run this program
在rc.local啟動tomcat的命令前面加上設定環境變數的命令即可
#!/bin/bashsh /root/t.sh export JAVA_HOME=/app/jdk/jdk1.8.0_221 export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export PATH=$PATH:${JAVA_HOME}/bin /app/tomcat/bin/startup.sh exit 0
reboot後已可再次訪問tomcat服務
2.chkconfig命令設定
對於在安裝過程中已經被註冊為系統服務的服務如mysql等,可以通過chkconfig命令設定開機啟動;
chkconfig可查詢作業系統在每一個執行等級中會執行哪些系統服務,其中包括各類常駐服務。
使用語法:
chkconfig [--add][--del][--list][系統服務名稱] 或 chkconfig [--level <等級代號>][系統服務名稱][on/off/reset]
引數:
- --add 增加所指定的系統服務,讓 chkconfig 指令得以管理它,並同時在系統啟動的敘述檔案內增加相關資料。
- --del 刪除所指定的系統服務,不再由 chkconfig 指令管理,並同時在系統啟動的敘述檔案內刪除相關資料。
- --level<等級代號> 指定讀系統服務要在哪一個執行等級中開啟或關畢。
eg:
開啟服務
# chkconfig telnet on //開啟 Telnet 服務
關閉服務
# chkconfig telnet off // 關閉 Telnet 服務