Linux

對 /etc/init.d 與 /lib/systemd/system 服務感到困惑

  • May 13, 2021

我正在嘗試在 Debian 8.5 機器上執行 MongoDB。當我安裝軟體包(從 percona.com 預先建構)時,我注意到以下文件:

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

我知道這/etc/init.d/mongod在啟動時或在其他特定係統狀態下呼叫,只要它是通過update-rc.d. 這對我來說非常好。該腳本初始化並啟動 mongo 守護程序。它似乎有啟動、停止、重啟等的“觸發器”,據我所知,我可以用sudo service mongod <action>.

/lib/systemd/system/mongod.service似乎做同樣的事情(即執行 mongo),但配置較少 - ExecStart 參數中只有一行:

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

據我了解,這可以通過sudo systemctl start mongod.

  • 我不明白是否在啟動時呼叫。
  • 我不明白為什麼需要其中兩個“服務”文件,以及如何擺脫一個(可能是 /lib/systemd 中的那個,因為它更簡單)。
  • 我不明白這兩者之間是否有任何關係。
  • 我也讀過它也systemctl適用於init.d腳本,在這種情況下,我不明白這兩個文件中的哪一個將由systemctl mongod start.

認為有一些冗餘,我應該選擇兩種方式中的一種。我想確定它是

  • 在啟動時呼叫
  • 可通過命令呼叫(如serviceor systemctl)。

你能幫我理清構想嗎?

當您同時擁有一個init.d腳本和一個.service同名的 systemd 文件時,systemd 將使用該服務文件進行所有操作。我相信該service命令只會重定向到 systemd。init.d 腳本將被忽略。

使用systemd. 它是 Debian 8 中的新功能,但它是預設設置。Systemd 服務文件應該看起來比 init.d 腳本更簡單。您沒有提到 systemd 服務不支持的任何您需要的特定功能。

如果不包含服務文件,systemd將愉快地使用 init.d 腳本。所以 mongod 包開發者告訴你他們認為這個 systemd 定義更好:)。

看看輸出systemctl status mongod。如果啟用該服務以在啟動時啟動,則該Loaded:行將顯示“啟用”。否則你可以使用systemctl enable mongod. 您還可以包含選項--now,它會同時啟動 mongod。

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