udevで実行すると、スクリプトは異なる方法で実行されます。

udevで実行すると、スクリプトは異なる方法で実行されます。

奇妙に見えるスクリプトに問題があります。 udevで実行すると早期に実行が停止するようですが、コマンドラインから手動で実行するとそうではありません。トラブルシューティングのためにこれを試しましたが、set -xコマンドラインで実行すると、すべてが期待どおりに機能します。しかし、udevで実行すると、特定のポイントの後に早期に停止します。

私の考えの問題の一部は、udevによって実行されたときにスクリプトをデバッグするのが難しいことです。私はlogger声明を試しましたが、彼らは基本的に私に同じことを言いました(早く中断されました)。

この問題を引き起こす可能性のあるポップアップが表示されますか?


スクリプトを見つけることができますここ。注目すべき点の1つは、組み込みシステムに適していることです。コマンドラインから手動で実行したときに実行するコマンドは次のとおりです。

./product.sh -b update /dev/sda1

スクリプトを実行するためのudevルールは次のとおりです。

ACTION=="add", KERNEL=="sd?1", RUN+="/usr/sbin/product.sh -b update /dev/%k"

スクリプトが数行で停止しているようです。195または197存在するproduct.sh。私はその行をコメントアウトすると22そして28product-manifest.shudevとして実行し、コマンドラインから手動で実行すると、すべてが期待どおりに機能します。

答え1

さて、この問題を解決したと思います。問題はラインの結果だと思います157出力をマウントされたUSBドライブであるファイルにリダイレクトしました。私の考えでは、リダイレクトが同時に完了し、スクリプトが完了したproduct-manifest.sh後も続いて、最終的にUSBドライブへの同時書き込みが完了する前にUSBドライブがアンマウントされる原因になるようです。 umountが同時に発生すると、いくつかのエラーが発生し、最終的にスクリプトが早期に終了する原因になります。

回避策は、出力をSDカードにリダイレクトしてからcpUSBドライブにコピーすることです。

product-manifest.sh > "/tmp/MANIFEST"
cp "/tmp/MANIFEST" "$1"

正しい方向を教えてくれた@mikeservに感謝します。

関連情報