Systemd

為什麼systemctl stop service不能呼叫服務?

  • November 15, 2018
vim /home/mytest.sh
rm -f /home/mytest/*

我想編寫一個服務來執行刪除操作。

我的期望:

sudo systemctl stop mytest可以刪除 /home/mytest 中的文件

sudo systemctl start mytest什麼都不做。

編輯我的服務文件。

sudo vim /etc/systemd/system/mytest.service
[Unit]
Description=delete file

[Service]
Type=oneshot
ExecStart=/bin/true
ExecStop=/bin/bash /home/mytest.sh

[Install]
WantedBy=multi-user.target

啟用它。

sudo systemctl enable mytest

現在我為 mytest 服務發現了一個奇怪的動作。

sudo systemctl start mytest可以刪除 /home/mytest 中的文件

sudo systemctl stop mytest什麼都不做。

為什麼?請詳細說明。

這在systemd 服務文件中有詳細解釋,但您幾乎需要閱讀所有內容才能了解發生了什麼。在這種情況下,最相關的部分是範例 3;從中,讀者可以收集到您聲明的 oneshot 服務永遠不會啟動,因此它的停止操作將在其啟動操作完成後執行。

為了實現您所追求的,您需要一個仍然啟動的 oneshot 服務:

[Unit]
Description=delete file

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStop=/bin/bash /home/mytest.sh

[Install]
WantedBy=multi-user.target

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