ジョブ制御が利用できない場合 タイムアウトコマンドなしのタイムアウトシェルコマンド

ジョブ制御が利用できない場合 タイムアウトコマンドなしのタイムアウトシェルコマンド

シリアル接続を使用して、リモートデバイスでいくつかのベンチマークを実行するプロセスを自動化したいと思います。ベンチマークが停止せずに失敗する可能性があるため、ブロックを防ぐためにタイムアウトを追加したいと思います。コマンド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

これらの制限の下でコマンドタイムアウトを設定する方法を知っていますか?

ベストアンサー1

おすすめ記事