在 Ubuntu 18.04 版本中,rc.local 腳本被棄用了,這意味著 rc.local 腳本在 Ubuntu 18.04 中不再被默認啟用。相反,systemd 已經成為 Ubuntu 的系統服務管理器,systemd 的方式可以更好地管理系統服務。
在 systemd 中,可以使用 systemd 的 systemctl 命令來啟動、停止、重啟和管理服務。相比于 rc.local,systemd 提供了更加靈活和可靠的服務管理方式,例如可以控制服務的啟動順序、并行啟動多個服務等。
因此,從 Ubuntu 18.04 開始,建議使用 systemd 來管理系統服務,而不是使用 rc.local。如果你需要在啟動時運行自定義腳本,可以考慮使用 systemd 的 systemd-unit-files 功能,或者使用 crontab 的 @reboot 指令來實現。
在 Ubuntu 20.04 上實現開機自啟需要遵循以下步驟:
1、編寫需要自啟動的腳本文件,比如 /home/user/myscript.sh
2、給該腳本文件賦予可執行權限,命令如下:
$ chmod +x /home/user/myscript.sh
3、在/etc/systemd/system 目錄下創建一個新的 service 文件,命名為 myscript.service:
$ sudo vim /etc/systemd/system/myscript.service
在該文件中輸入以下內容:
[Unit]
Description=My Script Service
After.NETwork.target
[Service]
User=user
ExecStart=/home/user/myscript.sh
[Install]
WantedBy=multi-user.target
各參數解釋:
【Description】 對本服務的描述
【After】字段不是必須的,服務依賴的其他服務,本例中需要在 network.target 服務啟動后才能啟動本服務。可以省略。如果省略該字段,則 systemd 將默認將當前服務的啟動順序設置為與其他服務無關,即在啟動過程中沒有任何依賴性關系,服務的啟動順序由系統自行決定。然而,在某些情況下,如果服務依賴于其他服務,可以使用 After 字段來明確指定其依賴關系,以確保服務的啟動順序正確。
【User】字段不是必須的,如果省略該字段,服務將使用 root 用戶來運行腳本。
【ExecStart】 關鍵字段,服務啟動命令,指定服務啟動時需要執行的命令或腳本
【WantedBy】用于指定服務的自動啟動級別,在 linux 系統中,多用戶模式是指允許多個用戶同時登錄并使用系統資源的模式,與之相對的是單用戶模式,只有一個用戶可以登錄并使用系統資源。多用戶模式是 Linux 系統最常用的模式之一,因此 multi-user.target 是系統默認的運行級別。
4、保存并關閉該文件,然后啟動該服務并將其設置為開機自啟:
$ sudo systemctl daemon-reload
$ sudo systemctl start myscript.service
$ sudo systemctl enable myscript.service
現在該腳本文件將在每次系統啟動時自動運行。
如果需要停止該服務并禁用開機自啟,可以使用以下命令:
$ sudo systemctl stop myscript.service
$ sudo systemctl disable myscript.service
注意:在創建 service 文件時,需要確保該文件的命名與服務名稱相同,并且后綴為 .service。同時,在使用 systemctl 命令時,需要使用 sudo 權限。