다음 bash 스크립트가 있습니다 ...
#!/bin/bash
# Delete JUNK temp folder
if [ -d JUNK/FOLDER/PATH ]
then
rm -rf JUNK/FOLDER/PATH
echo "Cleansed JUNK directory successfully!"
/usr/bin/mail -s "JUNK folder deleted successfully" [email protected] <<< "Success!"
else
/usr/bin/mail -s "JUNK folder not found" [email protected] <<< "Success!"
fi
아래와 같이 crontab에 있습니다.
* * * * * /bin/sh /home1/ramnath/public_html/myscripts/deltemp.sh
Q1: 스크립트가 실행되지 않는 이유는 무엇입니까? 오류가 있나요? 터미널에서 스크립트를 수동으로 실행하면 오류가 발생합니다.
bash myscripts/deltemp.sh Cleansed JUNK directory successfully! myscripts/deltemp.sh: line 8: mail: command not found
======================
참고: 문제가 해결되었습니다. 방금 사용했어요
mailx -s "JUNK directory deleted" "[email protected]"
답변1
스크립트에 절대 경로를 제공해야 하며, cron
스크립트는 $HOME
.
mail(1)
이 고대 프로그램이 아직 설치 되지 않았을 수도 있습니다 . 정신 건강을 위해 스크립트가 실행하는 실행 파일이 있는 경우 해당 실행 파일의 전체 경로도 제공하십시오.
일반적으로 말하면,어느PATH
추가 권한(다른 사용자로서 자동으로 실행됨)으로 실행되는 스크립트는 절대 경로, 명시적 설정 또는 전체 경로를 사용하여 실행 파일을 실행하려면 몇 가지 추가 작업이 필요합니다. 이렇게 하면 이상한 디렉터리에서 실행하거나 잘못된(또는 악의적인) 실행 파일을 선택하는 것을 방지하고 많은 문제를 피할 수 있습니다.
답변2
1) 오류는 거의 자명합니다. 스크립트가 mail
바이너리를 찾을 수 없습니다. 설치되지 않았거나 설치되었지만 $PATH에 없으므로 이를 호출하고 전체 경로(예: /usr/bin/mail
)를 지정해야 합니다.
mail
2) 이메일 메시지의 Date:
헤더에 이미 타임스탬프가 있으므로 에 전달된 페이로드에 타임스탬프를 수동으로 추가할 필요가 없습니다 .
Date: Fri, 22 Jan 2016 06:30:10 -0800
보내는 서버의 시간이 동기화되었는지 확인하세요(예: NTP를 통해).