나는 많은 일반적인 오류를 제거하려고 노력했지만
cron에 PATH를 사용할 수 있는지 확인하세요.
crontab 파일 끝에 닫는 줄이 있습니다.
시간대는 다음과 같이 설정됩니다.
cd /etc cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime
Bash에서 실행하면 date
다음을 얻습니다.
Tue Sep 17 15:14:30 SGT 2013
cron이 동일한 시간을 사용하는지 확인하려면,
* * * * * date >> date.txt
date.txt에 동일한 날짜 출력을 제공합니다.
이것은 내가 실행하려는 스크립트입니다.
event.sh
:
#!/usr/bin/env bash
echo data > /root/data.txt
을 사용하면 crontab -e
다음 줄이 작동합니다.
* * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1
15 * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1
그러나 다른 매개변수를 시도할 때 오후 2시 50분에 실행되기를 원합니다.
50 14 * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1
또는
50 14 * * * (cd /root ; ./event.sh >/tmp/debug.log 2>&1)
더 이상 작동하지 않습니다. 내 타이밍 주장에 문제가 있는 것 같습니다. 파일에서도 아무것도 발견되지 않았습니다 /tmp/debug.log
.
해결책:
결과적으로 TZ를 변경한 후 cron 서비스를 다시 시작해야 했습니다.
답변1
첫째, 하나의 필드를 고려하는 데 오류를 일으키는 버그가 발생할 가능성은 다음과 같습니다.비정상적으로낮은. 이는 무슨 일이 일어나고 있고 크론이 기대하는 바에 대한 오해일 가능성이 높습니다.
이 경우, 우리는 질문에 대한 댓글을 통해 이것이 시간대 관련 문제일 가능성이 가장 높다는 것을 알아냈습니다. 이를 위해 다음을 수행합니다.
* * * * * date
crontab과 유사한 항목 추가- 제거하다(또는 주석 처리) crontab의 모든 TZ 할당
이렇게 하면 date
실행 시 호출자의 시간대 설정을 사용하게 됩니다.이는 cron 데몬이. 출력을 보면 cron이 내부적으로 사용하는 시간대가 표시되므로 시간 필드가 어느 시간대에 있기를 원할 가능성이 높습니다. crontab에 TZ 할당이 있는 경우 TZ 환경 변수 할당은 호출 명령에 쉽게 전달됩니다.그러나 cron 자체는 다른 시간대를 사용합니다.. TZ 할당에 주석을 달거나 제거하면 이러한 모호성을 피할 수 있습니다.
또한 시스템의 전역 시간대 설정(예: /etc/localtime 포함)을 변경하려면 최소한 cron 데몬을 다시 시작해야 하며, 전체 효과를 적용하려면 시스템을 다시 시작해야 할 수도 있습니다(가능성은 낮지만). crontab에서 TZ 할당 편집해서는 안 된다cron 데몬은 파일이 변경되었음을 감지하고 자동으로 다시 로드해야 하므로 다시 로드해야 합니다.