[linux]rshのタイムアウト

残念ながらRHEL(RedHat)のrshコマンドにはタイムアウトのオプションが実装されていない。
rsh実行中にOSPFなどの動的ルーティングで経路が変わったりネットワークの状態に変化があった場合、
rshコマンドのパケットが戻ってこれずに、いつまで経ってもrshコマンドが終了しないという困った状態になる。
rshコマンドのタイムアウトが実装されていない場合の回避方法。
スクリプト使います。
ポイントは

  • rshをバックグラウンド実行
  • bashの特殊変数SECONDSを使用して、スクリプト開始からの経過時間を取得し、それを利用する

です。

#!/bin/bash
# タイムアウト秒数指定
timeoutsec=120
rsh "リモートコマンド" &
# バックグラウンド実行(rsh)のpidを取得
bpid=$!
startsec=${SECONDS}
while [[ 1 == 1 ]]
do
    # rshコマンド終了チェック
    stdout=$( ps auwwwwx | egrep "^.+[[:space:]]${bpid}[[:space:]]")
    if [[ -z "${stdout}" ]];then
        # 終了している
    	break
    fi
    # 経過分数を取得
    nowsec=${SECONDS}
    # rsh開始からの経過分数取得
    (( divsec=${nowsec}-${startsec} ))
    if (( ${divsec} > ${timeoutsec} ));then
    	# タイムアウト
    	kill -9 ${bpid}
    fi
    sleep 10
done

 

[linux]RPMパッケージの依存性を調べる方法

rpmパッケージのパッケージ依存を調べる方法

インストール済みパッケージの場合

rpm -qR [パッケージ名]

で調べられる。

# rpm -qR kernel
rpmlib(VersionedDependencies) <= 3.0.3-1
fileutils
module-init-tools
initscripts >= 8.11.1-1
kernel-firmware >= 2.6.32-220.4.1.el6
grubby >= 7.0.4-1
dracut-kernel >= 002-18.git413bcf78
/sbin/new-kernel-pkg
/sbin/new-kernel-pkg
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsXz) <= 5.2-1
rpmlib(VersionedDependencies) <= 3.0.3-1
fileutils
module-init-tools
initscripts >= 8.11.1-1
kernel-firmware >= 2.6.32-220.4.2.el6
grubby >= 7.0.4-1
dracut-kernel >= 002-18.git413bcf78
/sbin/new-kernel-pkg
/sbin/new-kernel-pkg
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsXz) <= 5.2-1
rpmlib(VersionedDependencies) <= 3.0.3-1
fileutils
module-init-tools
initscripts >= 8.11.1-1
kernel-firmware >= 2.6.32-220.7.1.el6
grubby >= 7.0.4-1
dracut-kernel >= 002-18.git413bcf78
/sbin/new-kernel-pkg
/sbin/new-kernel-pkg
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsXz) <= 5.2-1

 

rpmパッケージファイルから調べる場合

rpm -qpR [パッケージファイルパス]

で調べられる。

# rpm -qpR zabbix-1.8.5-2.el6.JP.x86_64.rpm
警告: zabbix-1.8.5-2.el6.JP.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID f32904ff: NOKEY
/bin/sh
/usr/sbin/useradd
logrotate
rpmlib(CompressedFileNames) rpmlib(FileDigests) rpmlib(PayloadFilesHavePrefix) rpmlib(PayloadIsXz)