1

Nagios NRPE を CentOS マシンに自動的にダウンロードしてインストールするスクリプトを作成しました。スクリプトの関連部分は次のとおりです。

read -r -p "How would you like to configure the NRPE daemon? [X]inetd / Standalone [D]aemon " DMN
        if [ "DMN" = "x" -o "DMN" = "X" ];
                then
            DMNMODE="xinetd"
                        cat << EOF > $XINETDFILE
service nrpe
{
        flags           = REUSE
        type            = UNLISTED
        port            = $NRPEPORT
        socket_type     = stream
        wait            = no
        user            = $NGUSER 
        group           = $NGGROUP
        server          = /usr/sbin/nrpe
        server_args     = -c $NRPECFG --inetd
        log_on_failure  += USERID
        disable         = no
        only_from       = 127.0.0.1 $NAGIOSSRV
}
EOF
            /etc/init.d/xinetd restart
        elif [ "DMN" = "d" -o "DMN" = "D" ];
                    then 
                chkconfig nrpe on ; $NRPESVC start
                DMNMODE="daemon"

    fi
function CheckInstMode {
                                if [ "DMNMODE" = "daemon" ];
                                        then
                        $NRPESVC restart
                    else
                        $XINETDSVC restart
                                fi
}
read -r -p "Would you like to pull NRPE plugins from Nagios server? [y/n]" ANS1
        if [ $ANS1 = "y" ];
                then
                        if [ $ARCH = "64" -a $NGSARCH = "64" ] ;
                        then scp root@$NAGIOSSRV:$NGPLUGINS64/* $NGPLUGINS64/
                        chown -R $NGUSER.$NGGROUP $NGPLUGINS64
            CheckInstMode
                        elif [ "$ARCH" = "64" -a "$NGSARCH" = "32" ] ;
                        then scp root@$NAGIOSSRV:$NGPLUGINS32/* $NGPLUGINS64/
                        chown -R $NGUSER.$NGGROUP $NGPLUGINS64
            CheckInstMode
                        elif [ "$ARCH" = "32" -a "$NGSARCH" = "32" ] ;
                        then scp root@$NAGIOSSRV:$NGPLUGINS32/* $NGPLUGINS32/
                        chown -R $NGUSER.$NGGROUP $NGPLUGINS32
            CheckInstMode
                        elif [ "$ARCH" = "32" -a  "$NGSARCH" = "64" ] ;
                        then scp root@$NAGIOSSRV:$NGPLUGINS64/* $NGPLUGINS32/
                        chown -R $NGUSER.$NGGROUP $NGPLUGINS32
            CheckInstMode
                        fi
        fi

この機能の背後にある考え方は、選択されたインストール モードを確認し、Xinetd が選択された/etc/init.d/xinetd場合は再起動し、NRPE が選択された場合は再起動/etc/init.d/nrpeすることです。スクリプトをデバッグ モード ( sh -x script) で実行したところ、出力は次のようになりました。

+ case $ARCH in
+ echo 'Configuring /etc/nagios/nrpe.cfg'
Configuring /etc/nagios/nrpe.cfg
+ cat
+ echo 'Adding nagios user to /etc/sudoers'
Adding nagios user to /etc/sudoers
+ echo 'Defaults:nagios !requiretty'
+ echo 'nagios ALL = NOPASSWD:/usr/lib64/nagios/plugins/*'
+ echo 'Setting ownership of nagios and nagios plugins folders to nagios user'
Setting ownership of nagios and nagios plugins folders to nagios user
+ chown -R nagios.nagios /etc/nagios
+ chown -R nagios.nagios /usr/lib64/nagios/plugins
+ read -r -p 'How would you like to configure the NRPE daemon? [X]inetd / Standalone [D]aemon ' DMN
How would you like to configure the NRPE daemon? [X]inetd / Standalone [D]aemon x
+ '[' DMN = x -o DMN = X ']'
+ '[' DMN = d -o DMN = D ']'
+ read -r -p 'Would you like to pull NRPE plugins from Nagios server? [y/n]' ANS1
Would you like to pull NRPE plugins from Nagios server? [y/n]y
+ '[' y = y ']'
+ '[' 64 = 64 -a 64 = 64 ']'
+ scp 'root@IP:/usr/lib64/nagios/plugins/*' /usr/lib64/nagios/plugins/
1                                             100%   71     0.1KB/s   00:00    
Back-check_services.pl                        100% 2485     2.4KB/s   00:00    
cacticpu.sh                                   100%  189     0.2KB/s   00:00    
check_apt                                     100%   99KB  99.4KB/s   00:00    
check_breeze                                  100% 2253     2.2KB/s   00:00    
check_by_ssh                                  100%   41KB  40.6KB/s   00:00    
check_clamd                                   100%   46KB  46.5KB/s   00:00    
+ chown -R nagios.nagios /usr/lib64/nagios/plugins
+ CheckInstMode
+ '[' DMNMODE = daemon ']'
+ /etc/init.d/nrpe restart
Shutting down nrpe:                                        [  OK  ]
Starting nrpe:                                             [  OK  ]
+ stat --format=%Y /etc/passwd
+ chmod +x /usr/local/share/applications/file
+ read -r -p 'Would you like to test NRPE? [y/n]' ANS2
Would you like to test NRPE? [y/n]

ご覧のとおり、xinetd またはデーモンの質問に対する私の入力は "x" でしたが、代わりにDMNMODE期待される変数は isxinetdです。daemonこれにより、スクリプトが選択されnrpeていてもスクリプトが再起動しxinetdます。何が間違っているのか教えてください。

編集 #1: variable から予期しない結果がまだ得られます$DMNMODE。デバッグの実行は次のとおりです。

How would you like to configure the NRPE daemon? [X]inetd / Standalone [D]aemon x
+ [[ x = [Xx] ]]
+ DMNMODE=xinetd
+ cat
+ /etc/init.d/xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]
+ read -r -p 'Would you like to pull NRPE plugins from Nagios server? [y/n]' ANS1
Would you like to pull NRPE plugins from Nagios server? [y/n]y
+ '[' y = y ']'
+ '[' 64 = 64 -a 64 = 64 ']'
+ scp 'root@IP:/usr/lib64/nagios/plugins/*' /usr/lib64/nagios/plugins/
1                                             100%   71     0.1KB/s   00:00    
Back-check_services.pl                        100% 2485     2.4KB/s   00:00    
cacticpu.sh                                   100%  189     0.2KB/s   00:00    
check_apt                                     100%   99KB  99.4KB/s   00:00    
negate                                        100%   30KB  29.7KB/s   00:00    
plugins.pm                                    100% 1939     1.9KB/s   00:00    
+ chown -R nagios.nagios /usr/lib64/nagios/plugins
+ CheckInstMode
+ '[' xinetd = daemon ']'
+ /etc/init.d/nrpe restart
Shutting down nrpe:                                        [  OK  ]
Starting nrpe:                                             [  OK  ]
+ stat --format=%Y /etc/passwd
+ chmod +x /usr/local/share/applications/file
+ read -r -p 'Would you like to test NRPE? [y/n]' ANS2

私の質問は...関数が間違った値を返すのはなぜですか? 上にスクロールすると、質問に X と入力したことがわかります。これは、DMNMODE変数がに設定されていてxinetd、そうでないことを意味しますnrpe...問題を見つけてください。

あなたの助けは大歓迎です! イタイ

4

1 に答える 1

2

$DMN変数参照に符号$がありません。

if [ "$DMN" = "x" -o "$DMN" = "X" ];
于 2014-10-19T16:00:54.050 に答える