2016-08-19 53 views

回答

14

Type=oneshot服務單元:在開始操作

  • 塊,直到所述第一過程退出,並且其狀態將被報告爲「活化」;

  • 一旦第一個進程退出,從「激活」直接轉換爲「不活動」,除非設置了RemainAfterExit=true(在這種情況下,它變爲「活動」且沒有進程!

  • 可以沒有ExecStart=但有ExecStop=(用於安排在系統關閉時運行的東西)。

Type=simple服務單元:

  • 不上的開始操作框;(即變爲分叉斷所述第一工藝之後「活性」立即,即使它仍然是初始化。!)

  • 一旦第一個進程退出,從「active」跳轉到「inactive」(沒有RemainAfterExit=選項);

  • 通常是不鼓勵的,因爲沒有辦法區分諸如「由於配置錯誤而從開始退出」,「在運行500毫秒後崩潰」等情況。

兩個Type=oneshotType=simple單位:

  • 忽略第一個過程的任何孩子,所以不分叉過程(注意使用這些模式:你可以使用Type=oneshotKillMode=none但只能做這如果你知道你在做什麼)。
+1

intelfx說'Type = oneshot'服務單元「可以沒有'ExecStart ='」。這不是真的。實際上,'oneshot'類型的服務可以有多個'ExecStart ='指令。有關更多信息,請參見「systemd.service」的最新手冊頁。 – rlandster

+0

@ rlandster:爲什麼這是「不正確」? [systemd.service(5)](https://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=)在'ExecStart ='下面說:「除非Type =是單項,命令必須給出,當使用Type = oneshot時,可以指定零個或多個命令。「 – intelfx

-1

從systemd的角度來看,Type=simple是一種失火和遺忘。 Systemd只是在ExecStart=中定義了一個進程,並繼續前進,即使進程無法啓動。

+0

'Type = simple'進程仍然由systemd監視,並且將根據「Restart」設置的值重新啓動。 –