APC UPS의 이벤트에 응답하기 위해 apcupsd를 사용하고 있습니다. 데몬은 BASH 스크립트를 연결하여 응답에 영향을 미칩니다. 먼저 apccontrol(추가 매개변수 4개 포함)을 호출하고, 이어서 "onbattery"와 같은 이벤트별 스크립트를 호출합니다. 사용자는 이러한 세 번째 수준 스크립트만 편집할 수 있습니다.
이메일과 브로드캐스트를 위한 모듈식 메시지를 작성하기 위해 "onbattery" 스크립트를 편집했으며 "onbattery" 스크립트를 직접 호출할 때와 두 번째 수준 apccontrol에서 호출할 때 모든 것이 잘 작동했습니다. 그러나 체인이 최상위 데몬에서 시작되면 모든 명령(예: cat, echo 및 리디렉션/추가)이 최종 "onbattery" 스크립트에서 무시되는 것 같습니다.
생성된 셸/스크립트의 리디렉션이 문제라는 것을 읽은 후 이해하지만 문제를 해결하는 방법은 없습니다. 누구든지 도와줄 수 있나요?
onbattery 스크립트는 다음과 같습니다
#!/bin/bash
echo -e "From: Admin@somewhere \nSubject: Server on battery $(date +%D_%T) \n\n" > email.txt
cat OnBattWarn.txt >> email.txt
cat email.txt | ssmtp remoteadmin@somewherelse
wall | email.txt
exit99
답변1
당신의 배려에 감사합니다. 좋은 잠이 그 답을 밝혀냈습니다. 스크립트는 루트로는 잘 실행되지만 apcupsd에서는 실패합니다. 이는 권한 문제(Jeff가 제안한 대로)를 가리키지만 실제로 문제는 apcupsd가 원래 /apcupsd 디렉터리가 아닌 /에 email.txt 파일을 생성한다는 것입니다. 이 파일이 없으면 리디렉션, 추가 등이 실패합니다. 간단한 해결책은 절대 경로를 사용하는 것입니다. 바보 같군요! 이 스크립트 버전을 다른 곳에서 성공적으로 사용하지 않았다면 더 빨리 답을 찾을 수 있었을 것이므로 내 분석은 틀렸을 것입니다.
set -x를 사용하여 디버깅을 시도했지만 물론 bash 자체는 실패하지 않으므로 오류도 없고 결과도 없습니다. 어쨌든 이제 모든 것이 해결되었습니다. 시간을 내주셔서 감사합니다.