シリアル接続を使用して、リモートデバイスでいくつかのベンチマークを実行するプロセスを自動化したいと思います。ベンチマークが停止せずに失敗する可能性があるため、ブロックを防ぐためにタイムアウトを追加したいと思います。コマンドtimeout
がインストールされていないため、システムにプログラムをインストールできません。
システムは多くの機能が無効になっている最小ブートモードで実行され、シリアル接続はデバイス上でコマンドを実行するための唯一のオプションです。
以下は、タイムアウトなしで正常に実行された操作の例です。
for f in find $(find /opt/usr/tmp/benchmark.files -name *.so); do\
mv $f /root/_benchmark/${f##*/} &&
benchmark_app --file=/root/_benchmark/${f##*/} 2>&1 |\
tee /opt/usr/tmp/benchmark.files/`echo ${f##*/} | sed -re 's:lib(.*).so:\1:g'`;\
rm -f /root/_benchmark/${f##*/};
done;
echo FINISHED
私がそれを次のように変更した場合:
for f in find $(find /opt/usr/tmp/benchmark.files -name *.so); do\
mv $f /root/_benchmark/${f##*/} &&
benchmark_app --file=/root/_benchmark/${f##*/} 2>&1 |\
tee /opt/usr/tmp/benchmark.files/`echo ${f##*/} | sed -re 's:lib(.*).so:\1:g'`& sleep 60; kill $!;\
rm -f /root/_benchmark/${f##*/};
done;
echo FINISHED
エラーが原因で失敗します!: event not found
。
デバッグ用にシェルと手動で対話しようとしましたが、実行できますが、
sleep 60 & sleep 5; kill $!
これによりforループ内では実行できません。
for i in {1..3}; do
sleep 60 & sleep 5; kill $!;
done
それでも!: event not found
エラーが発生します。
PS:新しいシェルを開くと、次のメッセージが表示されます。no job control in this shell
これらの制限の下でコマンドタイムアウトを設定する方法を知っていますか?