私はファイルが存在する場所を監視し、スクリプトを実行する非常に簡単なサービスを作成することをしました。私は.pathユニットと.serviceユニットを持つシステムレイアウトを理解し、それを機能させることができました。しかし、私はPathExistsが本当に奇妙だと思います。テストで見たのは、ファイルを作成するとデバイスが実行されることです。その後、私のスクリプトはファイルを削除します。ファイルを再生成すると、デバイスが実行されないようです。その後、ファイルを手動で削除して再生成すると、デバイスが起動します。私はこれを繰り返してきたので、このパターンに従うようです。代わりにPathModifiedを使用し、ファイルが作成されるたびにファイルをキャプチャします。しかし、ファイルが削除されても実行されることは確実です。
サービスファイルです
パスファイル
[Unit]
Description=My app
Wants=myapp.service
[Path]
PathExists=/tmp/pathtofile/file
[Install]
WantedBy=multi-user.target
サービスファイルです
[Unit]
Description=My App service file
[Service]
Type=simple
ExecStart=-/path/to/my/script/script.sh param1
どんなアイデアがありますか?
答え1
あなたのファイルには私が作業しているものとは異なるものがありますが、ファイルのどの行に問題があるのかわかりません。
[root@localhost]~# cat run
#!/bin/sh
date +%s >> /root/run.log
[root@localhost]~# chmod +x run
[root@localhost]~# cat /etc/systemd/system/foo.service
[Unit]
Description=My App service file
[Service]
ExecStart=/root/run
[root@localhost]~# cat /etc/systemd/system/foo.path
[Unit]
Description=My app
[Path]
PathExists=/root/trigger
Unit=foo.service
[Install]
WantedBy=multi-user.target
[root@localhost]~# systemctl start foo.path
[root@localhost]~# rm run.log
[root@localhost]~# touch trigger
[root@localhost]~# rm trigger
[root@localhost]~# touch trigger
[root@localhost]~# cat run.log
1658387828
1658387829