
내 VPS에서 특정 서비스를 모니터링하는 스크립트를 작성했습니다. 해당 서비스(clamd.amavisd)는 예기치 않게 종료되는 경향이 있으며, 그럴 경우 내 이메일 서비스가 본질적으로 중지됩니다.
스크립트에서 다음 지침을 사용합니다.
STATUS_QUERY_RESULT_STRING=$(service $SERVICE_NAME status)
문제는 터미널에서 실행할 때 스크립트가 해당 변수에서 무언가를 수신하지만(알 수 있도록 파일에 에코했습니다) 불행히도 cron 작업에서 실행하면 변수가 비어 있다는 것입니다.
내가 뭔가 잘못하고 있다는 것이 분명합니다. 제가 고려하지 않은 요소가 있나요?
답변1
최소한의 환경 변수를 사용 하므로 실행 중인 모든 항목에는 cron
절대 경로가 있어야 합니다.cron
STATUS_QUERY_RESULT_STRING=$(/full/path/to/service $SERVICE_NAME status)
실제로 필요한 가장 중요한 PATH를 스크립트에서 설정할 수 있습니다.
PATH=/bin:/usr/local/sbin
ls
그러나 예를 들어 실제로 악의적인 해커의 공격이 예상된다는 사실을 언젠가 알아차리지 못할 경우 항상 절대 경로를 사용하십시오.
스크립트 시작 부분에 이와 같은 것을 사용할 의향이 있음을 지정하십시오.
CAT='/bin/cat'
LS='/bin/ls'
그리고 그것을 다음과 같이 사용하십시오
$LS -la /some/path
$CAT /etc/passwd