0

「for ループ」内でランダムにハングする傾向があるコードがいくつかあります。ssh セッションの PID が 5 秒間存在する場合、それを自動的に強制終了するソリューションを探しています。現在、ハングしたプロセスを手動で強制終了していますが、これを cron に入れたいので、自動 PID 強制終了は素晴らしいものです。

for host in `cat $WORKDIR/linux_hosts.txt $WORKDIR/aix_hosts.txt`
do
    ssh -o LogLevel=QUIET -o ConnectTimeout=2 -t $host "cat /etc/passwd" >> $FILEDIR/$host
done

助けてくれてありがとう!

4

3 に答える 3

2

すべてのsshプロセスをバックグラウンドで実行し、5 秒待ちます。sleep戻ったら、 を使用jobs -pして、まだ実行中のバックグラウンド ジョブのプロセス ID を取得し、それらを強制終了します。

cat "$WORKDIR"/{linux_hosts.txt,aix_hosts.txt} | while read host; do
    ssh -o LogLevel=QUIET -o ConnectTimeout=2 -t "$host" "cat /etc/passwd" >> "$FILEDIR/$host" &
done
sleep 5
kill $(jobs -p) 2>/dev/null
于 2013-04-04T14:41:58.567 に答える
0

タイムアウトを使用:

for host in `cat $WORKDIR/linux_hosts.txt $WORKDIR/aix_hosts.txt`
do
    timeout 5s ssh -o LogLevel=QUIET -o ConnectTimeout=2 -t $host \
                   "cat /etc/passwd" >> $FILEDIR/$host
done
于 2013-04-04T15:38:50.210 に答える