私は単純な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 restart
。touch restart
restart.service
restart 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は上記のようにまだ有効になっていると考え、変更後も無効にすることはできません。 (設置部分の欠落により)