USBドライブをマウントするときにスクリプトを呼び出すシステムサービスがあります。signal.service
:
[Unit]
Description= Updater trigger
Requires=usb-drive.mount
After=usb-drive.mount
[Service]
ExecStart=/usr/bin/signal
[Install]
WantedBy=usb-drive.mount
これにより正しい順序が生成されます。Journalctl
:
systemd[1]: Mounting /mnt/usb...
systemd[1]: Mounted /mnt/usb.
systemd[1]: usb-drive.mount: Succeeded.
systemd[1]: signal.service: Succeeded.
これで、ユーザーがUSBドライブを取り外し、システムがドライブをマウント解除したときにスクリプトを実行(マウントポイントフォルダを削除)したいと思います。 udevルールを作成しました。
ACTION=="remove", KERNEL=="7-1.1",SUBSYSTEM=="usb", RUN+="/usr/bin/removeFolder.sh"
問題は、ドライブがアンマウントされた後にスクリプトが呼び出されることがあり、ドライブがアンマウントされる前に呼び出されることがあることです。
次回以降にスクリプトを呼び出すにはどうすればよいですか?
systemd[1]: Unmounted /mnt/usb.
または、システムがドライブをマウント解除するときにsystemdを使用してスクリプトを実行する方法は?
私の目標は、削除時に/mnt/usbフォルダを削除することです。おそらくsystemdまたはudevのルールは必要ないかもしれません。 /etc/fstabに追加のルールを追加すると、それを行うことができますか?現在、次の規則があります。
/dev/sda1 /mnt/usb auto nofail,rw 0 2
答え1
いくつかの情報を見つけることができます。このブログ投稿
デフォルトでは、udevのマニュアルページでは、より長いプロセスではRUN + =を使用しないことをお勧めします。Archlinuxフォーラムトピック彼らは、実行したいスクリプトのsystemdユニットを提供し、udevルールから呼び出すことができるようにSYSTEMD_WANTSを使用するソリューションを提案しました。
次のものが必要です。スクリプトを呼び出すシステムサービス:
[Unit]
Description=Delete /mnt/usb folder on unmount
Requires=usb-drive.mount
After=usb-drive.mount
[Service]
ExecStart=/usr/bin/removeFolder.sh
[Install]
WantedBy=usb-drive.mount
udevルール:
ACTION=="remove", KERNEL=="7-1.1",SUBSYSTEM=="usb", ENV{SYSTEMD_WANTS}=="removefolder.service"
あなたが言ったように、おそらく最初のシステムサービスから始める方が合理的でしょう。