내 crontab에 문제가 있습니다. cron이 내 스크립트 중 하나를 시작하지 않습니다.
이것은 내 crontab(루트)의 상단 부분입니다.
SHELL=/bin/bash
#---------------------------------------
# Items availability
#---------------------------------------
# Daily offer import + daily sync everything
30 7 * * * /var/www/import/download_offers.sh > /var/logs/download_offers_cron.log
# Updates availability
# 7:45 mass update happens
*/5 0-6 * * * /var/www/import/check_availability.sh
0,5,10,15,20,25 7 * * * /var/www/import/check_availability.sh
*/5 8-23 * * * /var/www/import/check_availability.sh
#---------------------------------------
# Sales import + sync
#---------------------------------------
# Import EBAY + WWW sales. Run sales cleaner
*/15 * * * * /var/www/import/import_all.sh
*/5 * * * * /var/www/import/import_www.sh
55 13 * * * /var/www/import/import_all.sh
58 13 * * * /var/www/import/import_www.sh
... more stuff 7KB total ...
오랫동안 완벽하게 작동했는데 지난주에 라인을 다시 시작한 후
30 7 * * * /var/www/import/download_offers.sh > /var/log/download_offers_cron.log
그만 일해. download_offers.sh의 내용:
#!/bin/sh
echo "Working..."
echo "Download offers started" > /var/log/import/OFFER_START.log
... some private stuff ; just bunch of wget's and echo's ...
파일이 /var/log/import/OFFER_START.log
생성되지 않았습니다.
나는 지금까지 무엇을 시도했는가
- 시간을 7시 30분과 8시로 변경했습니다(원래는 7시 45분이었습니다)
- 추가했는데
> /var/logs/download_offers_cron.log
파일이 아직 생성되지 않았습니다. - 루트 이메일을 검색했는데 스크립트 중 하나만 빼고 모두 시작되었습니다.
- 파일은 +x 실행 파일입니다.
알려진 버그가 있나요? 메일 외에 crontab을 디버깅하기 위한 다른 옵션이 있습니까? 스크립트가 전혀 시작되지 않는 이유는 무엇입니까? 지난주에 재부팅하고 나니 잘 되더라구요...
내가 정신을 잃을 수 있게 도와주세요
편집하다:
CentOS 버전 6.6(최종 버전)을 사용하고 있습니다.
이것은 /var/log/cron입니다.
Mar 10 07:30:01 serverpro1 CROND[11291]: (root) CMD (/var/www/import/download_offers.sh > /var/logs/download_offers_cron.log)
cron 항목은 괜찮은 것 같은데 /var/log/download_offers_cron.log 파일이 없나요?
답변1
또 마술처럼 작동해요
내가 바꾼 유일한 것은
30 7 * * * /var/www/import/download_offers.sh > /var/logs/download_offers_cron.log
^^ here
도착하다
30 7 * * * /var/www/import/download_offers.sh > /var/log/download_offers_cron.log
^^ here
오류가 발생하고 스크립트가 전혀 작동하지 않는 이유는 무엇입니까? 나는 전혀 모른다
애초에 스크립트가 작동을 멈춘 이유는 풀리지 않는 미스터리입니다
답변2
cron 작업에 대해서는 /var/log/syslog 파일을 확인하십시오. 로그에서 "cron"이라는 단어를 찾아 오류가 무엇인지 확인하세요. 아래 명령을 사용하여 동일한 내용을 확인하십시오.
grep -i cron /var/log/syslog
그렇지 않으면 당신이 언급한 모든 것이 괜찮습니다.
답변3
crontab에서는 bash를 사용하라고 되어 있지만 스크립트를 실행하면 실제로 'sh' 셸을 다시 사용하게 되므로 모든 환경 변수가 손실됩니다. 지난주에이 문제가 발생했습니다. 내 문제는 스크립트가 cron에서 실행될 때 경로 변수가 없지만 수동으로 실행하면 스크립트가 제대로 실행된다는 것입니다.
스크립트 상단의 #!/bin/sh 다음에 이를 수행하여 이를 테스트할 수 있습니다.
echo $PATH
echo $path
sleep 10
스크립트가 cron에 의해 실행될 때. "sh"가 어떤 경로를 사용했는지 기억나지 않으므로 둘 다 에코하세요.
스크립트에 "sh"를 사용하지 않는 것이 좋을까요?
또는 실행하는 각 유틸리티에 대해 유틸리티, 각 입력 및 각 출력 파일의 전체 경로를 입력합니다.
따라서 스크립트가 다음과 같이 말한다면:
wget ...
전체 경로로 바꿀 수 있습니다.
/usr/bin/wget ...
아니면 올바른 경로가 무엇이든간에.
(아직 댓글을 달 수 없어서 답글을 달 수 없습니다. 죄송합니다.)
답변4
이것은 오타인 것 같습니다.
첫 번째 스크립트에서는 을 사용했지만 /var/log
새 스크립트에서는 입니다 /var/logs
. Log가 표준 디렉터리인데 log를 사용하는 것 같습니다.에스