저는 웹 서버에서 Nagios를 실행하고 있습니다. 특히 이 Nagios 서비스 검사의 경우 실패하면 스크립트가 실행됩니다. 스크립트는 Nagios 이벤트 핸들러를 통해 트리거됩니다.
Nagios 이벤트 핸들러 명령:
define command{
command_name testDisableServer
command_line /usr/local/nagios/etc/objects/event_handlers/testDisableServer.sh
}
다음과 같이 Nagios 이벤트 핸들러에서 testDisableServer.sh라는 스크립트를 실행하고 있습니다.
#!/bin/bash
wall "Script execution started";
/usr/bin/sudo /root/scripts/disableServer.sh force
"testDisableServer.sh" 스크립트에는 다음과 같은 권한이 있습니다.
-rwxr-xr-x 1 nagios nagios 2.0K Oct 12 14:57 testDisableServer.sh
서비스가 중단되면 SSH 연결에 "스크립트 실행이 시작되었습니다"라는 담벼락 게시물이 표시되지만, 내 비활성화Server.sh 스크립트가 트리거되지 않습니다. 비활성화Server.sh에 다른 담벼락 게시물을 넣으려고 했지만 실행되지 않았습니다.
이 스크립트는 사용자 "nagios"에 의해 실행됩니다. 다음과 같이 visudo에 "nagios"를 추가했습니다.
nagios ALL=(ALL)NOPASSWD:/root/scripts/disableServer.sh
사용자 "nagios"로 명령줄에서 이 스크립트를 실행하면 완벽하게 작동합니다. 그러나 이벤트 핸들러가 이를 실행하면 출력이 없습니다. 출력을 로그 파일로 캡처하려고 시도했지만 아무것도 얻지 못했습니다. /root/scripts/disableServer.sh의 권한은 다음과 같습니다.
-rwxr-xr-x 1 root root 2.0K Oct 12 15:01 disableServer.sh
이벤트 핸들러가 "testDisableServer.sh"에 도달했지만 Nagios 이벤트 핸들러에서 "disableServer.sh"를 실행하지 않지만 사용자 nagios로 SSH 연결에서 제대로 작동하는 이유는 무엇입니까? 그런데 "testDisableServer.sh"는 이벤트 핸들러가 제대로 작동하는지 확인하기 위해 추가 레이어를 추가합니다(그렇게 보이는 것 같습니다). 이 스크립트 실행이 모두 해결되면 삭제됩니다.
답변1
아마도 환경 문제일 것입니다(스크립트는 nagios에서 실행할 때 사용할 수 없는 환경의 무언가에 의존함).
스크립트를 다음과 같이 변경하겠습니다(지금은 디버깅용).
#! /bin/bash -
exec 2> /tmp/log."$$"
set -x
wall "Script execution started";
/usr/bin/sudo /root/scripts/disableServer.sh force
set -x
그리고 위에 하나 더 추가disableServer.sh
/tmp/log.*
( 파일 에서) 무슨 일이 일어나고 있는지 확인하세요 .
답변2
내 경우에는 문제가 다음과 같습니다.
sudo: sorry, you must have a tty to run sudo
따라서 /etc/sudoers를 주석 처리하여 비활성화할 수 있습니다.
Defaults requiretty
어쨌든 이것은 아무런 소용이 없습니다.