여기에 로컬에서 잘 작동하는 스크립트가 있습니다.
#! /bin/bash
volts=`sudo vcgencmd measure_volts core|sed 's/volt=\([0-9\.]*\)V/\1/'`
echo -n "BCM2835 SoC Voltage is ${volts}V "
echo "| volts=$volts;1.5;1.5;0;1.5"
그러나 Nagios가 해당 정보를 얻으려고 하면 변수가 정의되지 않은 것처럼 "BCM2835 SoC 전압은 V입니다"만 얻습니다.
파일에서 정보를 추출하여 작업할 수 있는 다른 플러그인도 있습니다. 그래서 정보를 임시 파일에 쓰고 다시 변수에 쓸 수 있었습니다.
#! /bin/bash
sudo vcgencmd measure_volts core|sed 's/volt=\([0-9\.]*\)V/\1/'>/tmp/volts
volts=$(</tmp/volts)
echo -n "BCM2835 SoC Voltage is ${volts}V "
echo "| volts=$volts;1.5;1.5;0;1.5"
이제 Nagios의 가치를 알 수 있는데 왜 이것은 원격이 아닌 로컬에서만 작동합니까? 임시파일 없이 만들 수 있나요?
답변1
Nagios를 실행하는 사용자에게는 sudo
일반 계정과 동일한 권한이 필요합니다. 다음과 같은 명령을 사용하여 sudo
사용자가 어떤 권한을 가지고 있는지 확인할 수 있습니다 .
$ su - nagios -c "sudo -l"
Matching Defaults entries for nagios on this host:
requiretty, !visiblepw, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS MAIL PS1 PS2 QTDIR USERNAME LANG
LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME
LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", !requiretty
User nagios may run the following commands on this host:
(root) NOPASSWD: /etc/init.d/nagios* restart
(root) NOPASSWD: /etc/init.d/nagios restart
(root) NOPASSWD: /etc/init.d/nagios* reload
(root) NOPASSWD: /etc/init.d/nagios reload
(root) NOPASSWD: /usr/bin/nagios* -v *
(root) NOPASSWD: /usr/bin/nagios -v *
(root) NOPASSWD: /usr/bin/nagios* -s *
(root) NOPASSWD: /usr/bin/nagios -s *
(root) NOPASSWD: /etc/init.d/snmptrapd restart
(root) NOPASSWD: /etc/init.d/centstorage restart
(root) NOPASSWD: /etc/init.d/centstorage stop
(root) NOPASSWD: /etc/init.d/centstorage start
Nagios에 sudo
volts 명령을 실행할 권한이 있다고 가정하면 Nagios가 명령을 실행할 수 있고 비밀번호가 필요하지 않도록 vcgencmd measure_volts
sudo 권한이 위와 유사한지 확인해야 합니다 ( ). 파일 은 다음과 같아야 합니다.root
NOPASSWD
/etc/sudoers
nagios ALL = NOPASSWD: /path/to/vcgencmd measure_volts core