對 /etc/init.d 與 /lib/systemd/system 服務感到困惑
我正在嘗試在 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
.我認為有一些冗餘,我應該選擇兩種方式中的一種。我想確定它是
- 在啟動時呼叫
- 可通過命令呼叫(如
service
orsystemctl
)。你能幫我理清構想嗎?
當您同時擁有一個
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。