Systemd PathExists=はUnit=?内からトレースファイルが削除された場合は動作しません。

Systemd PathExists=はUnit=?内からトレースファイルが削除された場合は動作しません。

私は単純なsystemd.pathを持っていますrestart.path

[Unit]
Description=

[Path]
PathExists=/home/ubuntu/restart
Unit=restart.service

[Install]
WantedBy=multi-user.target

そしてトリガーされたrestart.serviceサービスは次のとおりです。

[Unit]
Description=

[Service]
ExecStartPre=echo PREPARING TO RESTART...
ExecStart=true
ExecStopPost=echo OK
ExecStopPost=/bin/rm -f /home/ubuntu/restart

[Install]
WantedBy=multi-user.target

動作は次のとおりです。 touch restart PREPARING TO RESTART... OK 実際にrestartファイルが消えます。しかし、ファイルを再生成しようとすると何も起こりません。これにより、次のようにtouch restart なりますrm restarttouch restartrestart.servicerestart path

これに関する文書は非常に曖昧であり、最終的になぜこれが起こり、どのように解決するのか理解できません。文書を作成するrestart.serviceたびに実行したいです。restart

答え1

あなたのrestart.service

[Unit]
Description=

[Service]
Type=simple
ExecStartPre=echo PREPARING TO RESTART...
ExecStart=/bin/rm -f /home/ubuntu/restart

つまり、このExecStopPost=行を使用せず、そのセクションも使用しないでください[Install]。そのrestart.pathユニットだけをアクティブにする必要があるからです。

  • restart.service⚠️デバイスが無効になっていることを確認してください今後上記のように変更してください。それ以外の場合、systemdは上記のようにまだ有効になっていると考え、変更後も無効にすることはできません。 (設置部分の欠落により)

関連情報