(2022-06-17 初稿)
筆者はRaspberry Piで温湿度を測ったりしている。
先日、少し遠い所の温湿度を計測しようと、センサーの接続ケーブルを伸ばしたところ、時々温湿度の取りこぼしエラーが発生するようになってしまった。
単に取りこぼしエラーが発生するだけなら良いのだが、何度かに一度は取得に行ってそのまま返事もなくスクリプトが止まってしまうことがあった。
最初は、ある時間が経過したら、bashスクリプトと子プロセスのPIDを調べてkillしようと考えたが、bashのPIDがなんだか複雑…
もっと簡単な方法はないかと検索したところ、timeoutなるコマンドがあることに気がついた。
使い方は簡単で、実行したいコマンドの前に、timeout 秒数を入力するだけである。
timeout 秒数 実行したいコマンド
ちなみに、timeoutコマンドは、以下のように調べるとcoreutilsに入っているらしい。
dpkg -S $(which timeout) coreutils: /usr/bin/timeout
こんな便利なコマンドが最初から入っていたなんて知らなかった。
なお、timeoutの使い方については、以下のサイトが詳しかった。多謝。
筆者は主にbashスクリプトから利用するので、サンプルを以下に示す。
ちなみに、timeoutコマンドは時間内にコマンドが正常実行できれば「0」、できなければ「254」を返す。
timeout 3 sleep 2; echo $? 0 timeout 3 sleep 5; echo $? 254
#!/bin/bash timeout 3 sleep 2 if [ $? -eq 0 ]; then echo "Success" else echo "Failed" fi
もっと早くにtimeoutコマンドのこと知りたかったなぁ