1 使用使用systemd實現(xiàn)開機自動運行命令
systemd是Linux系統(tǒng)中現(xiàn)代化的初始化系統(tǒng),可以使用它來實現(xiàn)開機自動運行命令。在systemd中,可以通過創(chuàng)建一個service文件,把要執(zhí)行的命令放在其中,然后將其添加到systemd的自啟動項中。
具體操作步驟如下:
1.1 新建一個.service文件
首先在終端中使用sudo權(quán)限創(chuàng)建一個.service文件,用于存儲service配置:
sudo vim /etc/systemd/system/myservice.service
1.2 編寫.service文件
在打開的文件中添加以下內(nèi)容(此處演示的開機自啟命令是需要sudo權(quán)限的),注意將其中的ExecStart替換為需要開機自啟動的具體命令,ExecStart后面加上sudo。
[Unit]
Description=My Service
After=network.target
[Service]
Type=simple
ExecStart=sudo /path/to/my/command
User=root
[Install]
WantedBy=multi-user.target
1.2.1 [Unit]
[Unit]是systemd服務(wù)文件的一個部分,用于定義服務(wù)的基本信息。
-
Description字段包含了一個簡短的描述,用于描述服務(wù)的名稱,方便用戶在查找時快速了解服務(wù)的作用。
-
After=network.target表示此服務(wù)會在網(wǎng)絡(luò)服務(wù)啟動后啟動。
- network.target是指網(wǎng)絡(luò)目標單元,是Systemd中預定義的一個特殊單元,用于表示網(wǎng)絡(luò)服務(wù)的啟動狀態(tài)。幾乎所有的網(wǎng)絡(luò)服務(wù),例如DHCP、DNS解析等,在啟動時都依賴于網(wǎng)絡(luò)服務(wù)的可用性。因此,將After=network.target添加到服務(wù)的unit文件中,可以確保該服務(wù)在網(wǎng)絡(luò)服務(wù)就緒后再啟動,從而避免出現(xiàn)啟動時的依賴性錯誤。
1.2.2 [Service]
[Service]是systemd服務(wù)文件中的另一個部分,用于定義服務(wù)的具體行為。
- Type字段是服務(wù)運行時的類型,simple表示它是一個后臺進程,通常用于只有一個進程的服務(wù)。
- ExecStart字段包含了要運行的命令,多個命令可以用換行符(\n)隔開。
- User字段指定了以哪個用戶的身份運行這個服務(wù),這里選擇root用戶。
1.2.3 [Install]
[Install]定義了systemd服務(wù)的安裝信息。
- WantedBy字段指定了服務(wù)將要執(zhí)行的“target”(一種操作系統(tǒng)運行級別),這里指定的“multi-user.target”是Linux系統(tǒng)默認的、包含多個用戶的運行級別,相當于傳統(tǒng)的“init 3”運行級別。這意味著服務(wù)將在系統(tǒng)啟動時自動運行。
1.3 啟動服務(wù)并設(shè)置自啟動
保存并退出上述.service文件,下面的命令可以啟動服務(wù)并將其添加到系統(tǒng)自啟動項中:
sudo systemctl start myservice
sudo systemctl enable myservice
執(zhí)行完該命令后,可以使用systemctl命令來查看該服務(wù)的狀態(tài):
sudo systemctl status myservice.service
啟動服務(wù)后,它將在系統(tǒng)啟動時自動啟動。也可以在任何時候使用以下命令停止服務(wù)并從自啟動項中刪除:
sudo systemctl stop myservice
sudo systemctl disable myservice
2 編寫Systemd服務(wù)文件的要點
2.1 Systemd服務(wù)文件的位置
Systemd服務(wù)文件通常存放在/etc/systemd/system目錄下。該目錄包含了各種類型的服務(wù)文件,如系統(tǒng)服務(wù)、用戶服務(wù)、網(wǎng)絡(luò)等等。
2.2 Systemd服務(wù)文件的格式
Systemd服務(wù)文件通常是以.service結(jié)尾的文本文件。服務(wù)文件中的各項設(shè)置使用鍵值對的形式指定,每一行都是以key=value的形式組成。
2.3 Systemd服務(wù)文件的基本結(jié)構(gòu)
Systemd服務(wù)文件通常包含了以下配置項:
-
[Unit]
:服務(wù)的全局信息和依賴性聲明,如服務(wù)名稱、描述等。 -
[Service]
:指定服務(wù)的具體配置,如服務(wù)執(zhí)行的命令、工作目錄等。 -
[Install]
:指定服務(wù)的安裝方式,如服務(wù)的啟動級別等。
2.3.1 [Unit]字段的配置
-
Description
:對服務(wù)的簡短描述。 -
Before
:定義服務(wù)在其他服務(wù)之前啟動。 -
After
:定義服務(wù)在其他服務(wù)之后啟動。 -
Requires
:定義服務(wù)啟動需要哪些其他服務(wù)已啟動,否則無法啟動。 -
PartOf
:定義該服務(wù)是其他服務(wù)的一部分,如果其他服務(wù)停止,該服務(wù)也會停止。 -
Wants
:定義服務(wù)啟動時可同時啟動哪些其他服務(wù)。 -
Condition...
:定義服務(wù)啟動的條件,如ConditionPathExists
表示某個路徑存在時才啟動該服務(wù)。
2.3.2 [Service]字段的配置
-
Type
:服務(wù)類型,可以是simple、forking、ondemand、notify等。 -
ExecStart
:服務(wù)啟動命令,可以是單個命令、腳本文件、或者多個命令組成的腳本。 -
ExecStop
:停止服務(wù)的命令。 -
User
:定義服務(wù)運行的用戶。 -
Group
:定義服務(wù)運行的用戶組。 -
PrivateTmp
:將服務(wù)的/tmp目錄掛載到私有的命名空間中,以增強安全性。 -
Restart
:定義服務(wù)異常退出時如何重啟。 -
WorkingDirectory
:定義服務(wù)工作目錄。 -
Environment
:定義服務(wù)的環(huán)境變量等。 -
ProtectSystem
:防止服務(wù)對系統(tǒng)文件進行修改。 -
NoNewPrivileges
: 防止服務(wù)通過setuid或setgid等提升權(quán)限。
2.3.3 [Install]字段的配置
-
WantedBy
:定義在哪些系統(tǒng)運行級別下啟用此服務(wù)。 -
RequiredBy
:啟動其他系統(tǒng)服務(wù)時必需啟動此服務(wù)。文章來源:http://www.zghlxwxcb.cn/news/detail-475116.html
2.4 示例 .service 文件
[Unit]
Description=MyService
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/myservice
WorkingDirectory=/var/myservice
User=myservice
Group=myservice
Restart=always
RestartSec=30
StartLimitInterval=400
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
這個示例中定義了一個名為"MyService"的服務(wù),服務(wù)啟動時執(zhí)行/usr/bin/myservice命令,執(zhí)行工作目錄為/var/myservice,運行用戶為myservice。如果服務(wù)異常退出,則每30秒嘗試重新啟動,最多嘗試3次。最后,服務(wù)將在多用戶運行級別下啟用。文章來源地址http://www.zghlxwxcb.cn/news/detail-475116.html
到了這里,關(guān)于【Linux】使用systemd設(shè)置開機自啟動命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!