timeoutコマンドによる指定時間経過時の処理切り替え
Pocket

仕事で、わざわざその為にスクリプトを組むのも面倒な、プロセス停止に時間がかかるようであればプロセスをkillしてしまうという対応があった。
面倒なのでワンライナーで対処できないかなぁ。。。と思い調べたところ、Linuxのディストリではtimeoutコマンドというものが用意されているようだ。

使い方は簡単で、以下のようにtimeoutコマンドを実行するだけだ。

timeout 待機時間(秒) 実行コマンド

 

で、実行コマンドが待機秒内で終了しない場合、exitコード124で異常終了する。

20160108_000000

[root@BS-PUB-CENT7-01 ~]# # 5秒でタイムアウト(2秒sleep)
[root@BS-PUB-CENT7-01 ~]# time timeout 5 sleep 2;echo $?

real    0m2.005s
user    0m0.001s
sys     0m0.003s
0
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# # 5秒でタイムアウト(10秒sleep)
[root@BS-PUB-CENT7-01 ~]# time timeout 5 sleep 10;echo $?

real    0m5.004s
user    0m0.001s
sys     0m0.003s
124
Sponsored Links

ということは、以下のように記述することでタイムアウト時の分岐処理を一行で記述できる。

timeout 待機時間(秒) 実行コマンド || timeout時の実行コマンド

20160108_000001

[root@BS-PUB-CENT7-01 ~]# # 5秒でタイムアウト(2秒sleep)
[root@BS-PUB-CENT7-01 ~]# time timeout 5 sleep 2 || echo "Timeout Error"

real    0m2.005s
user    0m0.002s
sys     0m0.003s
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# # 5秒でタイムアウト(10秒sleep)
[root@BS-PUB-CENT7-01 ~]# time timeout 5 sleep 10 || echo "Timeout Error"

real    0m5.003s
user    0m0.000s
sys     0m0.004s
Timeout Error

 

これで、ひとまずは対処出来たかな。

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。