Systemd

systemd:如何從第一次啟動時自動啟用服務?

  • January 20, 2022

我正在使用 systemd 來處理一些任務,並且我有一個服務文件,一旦啟用systemctl就可以正常工作。

現在,我想從第一次啟動時自動啟用它。

我知道將替換文件放入會將/etc/systemd/system/具有相同名稱的文件的行為替換為/lib/systemd/system/.

有一種方法可以自動啟用服務文件,只需將其放在某個目錄中?

**重要提示:**以下適用於我在 Ubuntu 下。它應該像在 Debian 下一樣工作。預設情況下,基於 RPM 的發行版會阻止自動啟動,但它仍然可以讓您更接近目標。

在大多數情況下,您希望在使用安裝部分安裝它,multi-user.target如下所示:

[Install]
WantedBy=multi-user.target

這意味著your-package.postinst腳本將自動為您啟動守護程序。

請注意,如果您有自己的your-package.postinst腳本,則必須確保包含 Debian 助手,如下所示:

#!/bin/sh

#DEBHELPER#

...your own script here...

如果沒有該#DEBHELPER#模式,打包程序將不會添加預設程式碼,因此您的守護程序將不會自動啟用和啟動。添加的程式碼將啟用並啟動服務:

systemctl enable <service-name>
systemctl start <service-name>

除非服務是static(沒有[Install]如上所示的部分。)靜態服務需要啟用特殊的命令行,預設情況下不可用:

systemctl add-wants multi-user.target <service-name>

正如我們所看到的,該命令包括multi-user.target預設#DEBHELPER#(systemd,真的)沒有線索,除非你有一個[Install]部分。

該包還必須使用systemd擴展建構。這意味著在您的debian/rules文件中包含以下內容:

%:
   dh $@ --with systemd --parallel

那應該讓你做好準備。

引用自:https://unix.stackexchange.com/questions/258316