目的
- 古いCentOS(CentOS4.3)に、timeoutコマンドが無かった
- ありもので実装できないかなぁ
環境
- CentOS 4.3
- bash
スクリプト
timeout.sh
#!/bin/bash
# タイムアウト秒を指定
ALIVE_TIME=10
# 以下がtimeoutコマンドの代用部分
(ping 192.168.1.1) & sleep ${ALIVE_TIME} ; ps $! > /dev/null 2>&1 && kill -9 $!
解説
上記のスクリプトではping 192.168.1.1
を10秒でタイムアウトするようにしています。
サンプルなので、ping -t 10
とかのツッコミは無し。
実行したいコマンド(ここでは、ping)を&
でバックグラウンド実行します。
sleep ${ALIVE_TIME}
でsleepします。(ここでは10秒)
sleep後、psコマンドでバックグラウンドに回したコマンド(ここではping 192.168.1.1
)の生存を確認します。
コマンドが起動中であれば、kill -9
でコマンドを停止します。
ワンライナーでもできるね
(ping 192.168.1.1) & sleep 10 ; ps $! > /dev/null 2>&1 && kill -9 $!