하위(/spawned라고 함) 스크립트의 Bash 리디렉션

하위(/spawned라고 함) 스크립트의 Bash 리디렉션

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 자체는 실패하지 않으므로 오류도 없고 결과도 없습니다. 어쨌든 이제 모든 것이 해결되었습니다. 시간을 내주셔서 감사합니다.

관련 정보