Linux配置開機自啟動


先了解一下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: 服務停止的執行命令

 

注:

該服務執行后,會有服務系統的日志


免責聲明!

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



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