先了解一下Linux一些腳本啟動的順序
/etc/rc.local -> /etc/profile -> 自定義腳本
通過系統提供的自啟動腳本
(這種方式適合添加需要開機自啟的應用程序,比如 redis、nginx 等等)
Linux 系統提供了一個開機啟動的腳本( /etc/rc.local 或 /etc/rc.d/rc.local 這兩個文件實際上是一個文件)
1、編輯 /etc/rc.local
vi /etc/rc.local
2、添加要執行的命令
注意:這里的執行命令都必須是全路徑的,就算你添加到了 PATH 路徑,自啟動的時候,也是識別不到的(因為啟動順序是 /etc/rc.local -> /etc/profile )
例如,我這里添加的 redis 自啟動:
#!/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 # redis 啟動命令/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
TIPS:如何你是第一次使用該腳本文件,需要給腳本文件授權可執行,命令如下:
chmod +x /etc/rc.local
chmod 說明:
- + 表示增加權限、- 表示取消權限、= 表示唯一設定權限
- r 表示可讀取,w 表示可寫入,x 表示可執行
通過 chkconfig 添加自定義的啟動腳本
(推薦用於linux開機自啟動 java 程序)
1、切換到 init.d 目錄
cd /etc/rc.d/init.d/
2、創建一個自啟動腳本,這里就創建一個名為 autostart.sh 的腳本吧(名字自取)
touch autostart.sh //創建 autostart.sh 腳本文件
3、編輯腳本
vi autostart.sh //打開autostart.sh,進行編輯
4、編寫腳本內容
(注意:為了防止腳本執行時,/etc/profile 里 export 的路徑未生效,需要手動 source 一下,使配置立即生效)
#!/bin/sh #chkconfig: 2345 80 90 #description:開機自動啟動的腳本程序 # 防止在腳本運行的時候,沒有加載 JDK 在 /etc/profile 的PATH添加的路徑配置 if [ ${JAVA_HOME} == '']; then echo "source /etc/profile,使環境變量加載" source /etc/profile fi # 以下是腳本內容(自己根據需要進行編寫) # 待啟動的application 路徑 app_path_array=( "/opt/eureka/" "/opt/admin/" ) for app_path in ${app_path_array[*]}; do # 這里,很重要,如果不切換到 jar 包的文件夾,那么下面腳本執行的路徑就是根路徑(/),這會導致 springboot 讀取不到 jar包下的 ./config/ 文件夾,而去讀取根目錄下的配置 /config 文件夾 cd ${app_path} # 找到以后綴 .jar 結尾的文件 APP_NAME=`find -name *.jar ` # 啟動 nohup java -jar ${APP_NAME} & done
腳本文件內容說明:
第一行 “#!/bin/sh” 告訴系統使用的shell
第二行 “#chkconfig: 2345 80 90” 表示在2/3/4/5運行級別啟動,啟動序號(S80),關閉序號(K90);
第三行 “#description” 表示的是服務的描述信息
(注意:第一行和第二行必須寫,否則后面使用 chkconfig 命令注冊腳本到開機啟動項時會報錯 “服務 autostart.sh 不支持 chkconfig”)
擴展資料
Linux啟動級別:
0 關機
1 單用戶
2-5 多用戶圖形界面
6 重啟
5、給腳本賦可執行權限
chmod +x autostart.sh
6、將腳本添加到開機啟動項中,並啟動腳本
chkconfig --add autostart.sh chkconfig autostart.sh on
另:如果啟動的腳本未達到想要的效果,可以查看腳本執行的日志來分析
查看腳本執行日志的方式(以腳本 autostart.sh為例):
1)journalctl -u autostart
2) systemctl status autostart
通過自定義service服務
(很少用到這種方式,不做評價)
這種方式的啟動,推薦一篇博客:https://blog.csdn.net/tianlong1569/article/details/100539200
以下是對上述博客的補充:
service腳本分為3個部分:[Unit] [Service] [Install]
1、Unit
Unit表明該服務的描述。最常用的場景就是定義該腳本執行的順序,比如:
After=dbus.service
表示該service 在 dbus.service 之后再執行
2、Service
Service是腳本的關鍵部分,這一部分用於設置一些關鍵參數:
Type=forking
: 后台運行模式
PIDFile
: 存放PID文件的位置
ExecStart=xxx
: 服務運行的具體執行命令
ExecReload=xxx
: 服務重啟的執行命令
EexcStop=xxx
: 服務停止的執行命令
注:
該服務執行后,會有服務系統的日志