udevはルールをトリガーしますが、スクリプトは正しく実行されません。

udevはルールをトリガーしますが、スクリプトは正しく実行されません。

ヘッドレスシステムの高速で汚れたバックアップを自動化しようとしています。 (私はBusyboxユーティリティを実行しているので、これが私が利用できるインストールツールであることに注意することが重要であると思います。)USBデバイスが接続されたら、スクリプトを実行するudevルールを作成し、トリガして実行します。スクリプトをリクエストしました。

現在、スクリプトはデバイスをマウントするだけで、これを行うことはできません。スクリプトを手動で実行してもエラーは発生しません。私はexec >/home/user/udev.out 2>&1それが失敗した理由を見つけるためにその行を追加しました。

スクリプト内容:

#!/bin/sh
exec >/home/user/udev.out 2>&1
mount -t ntfs-3g /dev/sdb1 /mnt/backup
exit 0

私はスクリプトで/ dev / sdb1を使用してはいけないことを知っており、udevルールからシンボリックリンクを生成しましたが、エラーを確認するためにデバイスをハードコードしました。

また、マウントコマンドを実行する前にシステムがデバイスを検出できるようにするために、マウントコマンドの前に3秒のスリープモードを追加しようとしましたが、役に立ちませんでした。

udev.out結果:

mount: mounting /dev/sdb1 on /mnt/backup failed: No such device

デバイスがそこにあり、fdiskにリストされていることを知っています。シェルからスクリプトを呼び出すと、問題なく正常に実行されます。

以前似たようなことを経験した人はいますか?どのように進むべきかわかりません。

編集:udevルール:

SUBSYSTEM=="block", ATTRS{serial}=="serialforusbdrive", SYMLINK+="kingston%n"
SUBSYSTEM=="usb", ATTRS{serial}=="serialforusbdrive", RUN+="/usr/local/bin/backup.sh"

編集:説明:udevルールは私のスクリプトを起動して実行します。シェルで手動で実行するスクリプト (/usr/local/bin/backup.shシェルを入力してドライブをマウントする) udev ルール (RUN+="/usr/local/bin/backup.sh") で実行すると、スクリプトはスクリプトを実行しますがドライブをマウントしないできません。

答え1

ついに問題を解決しました。

問題はすべての仕事のタイミングに関連していると思います。

同じサブシステムになるようにudevルールを変更しました。

SUBSYSTEM=="block", ATTRS{serial}=="serialforusbdrive", SYMLINK+="kingston%n"
SUBSYSTEM=="block", ATTRS{serial}=="serialforusbdrive", RUN+="/usr/local/bin/backup.sh"

次に、スクリプトの先頭に次の行を追加します。

sleep 5
stat /dev/kingston1

すべてのタイミングが少しずれているようです。ディスクが準備される前にマウントを試みており、「USB」サブシステムが「ブロック」サブシステムの前に実行されるため、スクリプトが実際に実行されたときに私のシンボリックリンクは存在しません。

関連情報