1. 程式人生 > 其它 >ubuntu 20 新增開機自啟動

ubuntu 20 新增開機自啟動

開機自啟動
ubuntu作為伺服器使用時,常常需要在機器重啟時能自動啟動我們開發的服務。有時候我們想要指令碼開機自動執行,那麼就需要設定開機自啟動指令碼。網上有很多種解決方案,基本上是分為三種:

修改/etc/r.local
我在ubuntu18和ubuntu20.10都親測 /etc/rc.d/rc.local開機啟動指令碼不生效。主要有以下步驟:

檢視是否有/etc/rc.d/rc.local

ls -l /etc/rc.d/rc.local

我這邊20這個版本的話,都沒有這個檔案。那就不管這個方式了

/lib/systemd/system增加開機啟動服務
通常在網上現有的方法,主要是通過修改/etc/init.d,最後修改許可權生成。但 Ubuntu 18.04 不再使用initd管理系統,改用systemd,包括用systemctl命令來替換了service和chkconfig的功能。systemd 預設讀取 /etc/systemd/system 下的配置檔案,該目錄下的檔案會連結/lib/systemd/system/下的檔案。不同於以往的版本,ubuntu18.04預設不帶/etc/rc.local檔案,我們需要通過配置來讓service生效。

檢查系統目錄/lib/systemd/system/test.service
如果沒有自己新建,檔案內容為(如果檔案存在本身是沒有[Install]項的,需要自己新增進去)

 

vim /lib/systemd/system/test.service
# 編寫內容
[Unit]
Description=test
Requires=network-online.target #若需要聯網後啟動的話,則需要加入該引數
After=network-online.target #若需要聯網後啟動的話,則需要加入該引數

[Service]
Type=forking
ExecStart=/bin/bash /home/test/test.sh #執行的內容是指令碼test.sh中的內容,其中包括它的絕對地址

[Install]
WantedBy
=multi-user.target

此處可以自行增加一個service在該路徑下,根據該路徑下的格式,自行定製即可。詳細引數資訊可以見下Systemd 新增自定義服務(開機自啟動).

修改配置檔案後需要重載入配置

sudo systemctl daemon-reload

建立test.sh

vim /home/test/test.sh
# 寫入如下內容
#!/bin/bash

echo `date`,"ok" >>/tmp/test.log

賦予可執行許可權

chmod +x /home/test/test.sh

設定開機啟動

systemctl enable test.service

檢視啟動的狀態

systemctl status test.service
root@rex:/home/rex# systemctl status test.service
● test.service - test
   Loaded: loaded (/lib/systemd/system/test.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Sat 2021-12-11 08:46:19 UTC; 35s ago
  Process: 967 ExecStart=/bin/bash /home/test/test.sh #執行的內容是指令碼test.sh中的內容,其中包括它的絕對地址 (code=exited, status=0/SUCCESS)

Dec 11 08:46:19 rex systemd[1]: Starting test...
Dec 11 08:46:19 rex systemd[1]: Started test.
# 檢視檔案是否寫入
root@rex:/tmp# cat test.log 
Sat Dec 11 08:46:19 UTC 2021,ok

關閉開機啟動

systemctl disable test.service
# 輸出
root@rex:/tmp# systemctl disable test.service
Removed /etc/systemd/system/multi-user.target.wants/test.service.