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.




免責聲明!

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



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