Ubuntu 18 和 Ubuntu 20 使用 rc.local執行開機啟動腳本


說明  

  在調試 Ubuntu20.0 開機啟動的時候,用了 systemd  的方法,該方法可以參考我的另一個篇博文:https://www.cnblogs.com/xingboy/p/15305027.html,感覺這個方法還要在系統燒錄后,輸入一次啟動命令,感覺不夠方便,就重新找了該方法,方法已經驗證可行,這里轉發記錄僅供參考學習使用,原文鏈接:https://blog.csdn.net/qq_36963372/article/details/102651661 。

Ubuntu 18 開機啟動  

  在 Ubuntu 16以前,有個很簡單的 rc.local ,在這個文件內寫上你要執行的命令,在開機后,系統就會以管理員權限去執行這些命令。但是,這個啟動腳本的控制粒度並不是很精細。
所以,在Ubuntu18 版本開始,Ubuntu使用了 systemd 替代了 initd 管理系統。並且默認已經取消了 /etc/rc.local 文件。

配置 rc.local.service

  vim /lib/systemd/system/rc.local.service  注意:可能你的系統的文件不是 rc.local.service 而是 rc-local.service ,這兩個文件內容實際是一樣的,我的 Ubuntu20.0 的文件名就是這個 rc-local.service,這樣你就是要修改 rc-local.service

       rc.local.service (rc-local.service)內容

[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local #該文件是你開機自啟動的文件,可以直接在里面的最后添加你要執行的腳本程序,不過注意要添加在最后的 exit 0 之前
After=syslog.target network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=no
GuessMainPID=no
 
#這一段原文件沒有,需要自己添加
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
#===================

  rc.local.service (rc-local.service)內容解釋

 [Unit] #區塊:啟動順序與依賴關系。

 ConditionFileIsExecutable=/etc/rc.local
 After=network.target

 ConditionFileIsExecutable #指定了執行的文件

 After #表示在 network.target 這個target后面進行執行。也就是網絡啟動完成之后,執行 /etc/rc.local 文件。

 [Service] #區塊:啟動行為,如何啟動,啟動類型。

 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 RemainAfterExit=yes
 GuessMainPID=no

 [Install] #區塊,定義如何安裝這個配置文件,即怎樣做到開機啟動。
 WantedBy=multi-user.target
 Alias=rc-local.service

 #[Install] 塊是我們自己編輯新增的。

添加服務文件  

  添加軟鏈接,將 /lib/systemd/system/rc.local.service(或者 rc-local.service 文件) 鏈接到 /etc/systemd/system/rc.local.service 系統在開機后會自動去 /etc/systemd/system/ 目錄下讀取需要啟動的服務配置。如果你是想在系統移植的時候實現,無法添加軟連接,那你可以直接把 /lib/systemd/system/rc.local.service 文件復制到 /etc/systemd/system/rc.local.service 直接復制文件過去也能達到軟連接的目的。

ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/rc.local.service

新建或者編輯rc.local 文件

  sudo vim /etc/rc.local

  寫入測試命令

#!/bin/bash

# 將你需要執行的命令寫在這里,禁止寫入死循環命令,如果寫入死循環,雖然可以正常開機使用,不過你的Debug調試口就會一直卡在死循環里,無法進行debug
echo "hello" > /home/test.log

exit 0

設置文件執行權限

  sudo chmod 755 /etc/rc.local

  如果你是在 /etc/systemd/system/ 目錄下創建的文件,也要加上執行權限。

驗證  

  重啟主機,檢查 /home/ 下是否有 test.log 文件。如果一切正常,在 /home/test.log 文件內,可以看到 hello。

 


免責聲明!

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



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