web-dev-qa-db-ja.com

常時接続のドライブがマウントされているときにスクリプトを実行する

always connectedドライブがマウントされているときにスクリプトを実行するにはどうすればよいですか?

udevを試しました。具体的にはルールを配置します99-local.rules in /etc/udev/rules.d

KERNEL=="mmcblk0",ACTION=="mount",RUN+="/path/to/script.sh"

そしてルールをリロードします。ただし、ドライブがマウントされている場合、スクリプトは実行されません。

ドライブはSDカードであるため、mmcblk0ブロックデバイス名。 not USBドライブであり、notホットプラグされています。

2
Sqerstet

udevでこれを達成するのは簡単ではないことがわかります。 _udevadm monitor -p_を使用して、マウント時に、SDカードがudevで_ACTION=="mount"_イベントを発生させないことを確認しました。私はどこかでmountイベントが非推奨または削除されたことを読みました。 udevは、結局のところ、ホットプラグを管理することになっています。

さらに、udev- triggeredスクリプトは、実行中にudevをブロックするため、非常に迅速に完了する必要があります。バックアップなどの実質的なタスクには理想的ではありません。

_/etc/systemd/system/_のsystemdを使用して、ExecStartサービスファイルを_.mount_に書き込むことで目的を達成しました。

_[Unit]
Description=Script to run when drive mounted at /path/to/Stuff
Requires=path-to-Stuff.mount
After=path-to-Stuff.mount

[Service]
ExecStart=/path/to/script.sh
Type=forking

[Install]
WantedBy=path-to-Stuff.mount
_

正しく動作しますが、マウントポイントを指定する必要があります。

4
Sqerstet