ubuntu 20 新增開機自啟動
阿新 • • 發佈:2022-03-14
開機自啟動
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.