시간대 변경 후 Cron 작업이 시작되지 않습니다


13

나는 많은 일반적인 오류를 제거하려고 노력했다.

  1. cron에 PATH를 사용할 수 있는지 확인

  2. crontab 파일의 끝에 끝이 있습니다

  3. 시간대는 다음에 의해 설정됩니다.

    cd /etc
    cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime
    

datebash에서 실행 하면 다음을 얻습니다.

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
로그에 오류가 있습니까? 시도해 보지 말고 절대 경로로 ~/event.sh시도해보십시오/home/username/event.sh
Rahul Patil

1
또한 같은 작은 수정을 할* * * * * /bin/bash /root/event.sh >/tmp/debuge.log 2>&1
라훌 파틸

1
시간대가 올바르게 설정되었다고 말하지만 절대 확실 합니까? 같은 항목을 추가 하고 예상 시간 * * * * * datedate나타내는 지 확인 하십시오. crontab 내에서 TZ 환경 변수를 설정하면 cron 데몬 자체에서 사용하는 시간대에는 영향을 미치지 않지만 cron을 통해 시작된 프로세스 에는 영향을 미치므로 crontab에서 TZ를 설정하면 일시적으로 주석 처리하는 것이 좋습니다. 대신 시스템 시계의 시간대를 사용하여 시간을 설정하십시오 (리눅스를 단일 부팅하는 경우 UTC 일 있지만 현지 시간 일 수 있음).
CVn

1
@adsisco의 요점을 놓치고 있습니다. crontab에있을 수있는 TZ 지시문을 제거한 다음 다시 시도하십시오. 그러면 cron 데몬 자체와 동일한 TZ로 날짜가 실행되어 cron이 시간 필드를 원하는 시간대를 확인할 수 있습니다. / etc / localtime은 시스템 시계가 아닌 표시에만 영향 을 미치며 cron에 영향을 미치는지 의심 됩니다. 이 테스트를 수행하면 문제가 표준 시간대와 관련이 없다는 것을 확신 할 수 있습니다 (솔직히 나처럼 보입니다).
CVn

1
실제로, 나는 방금 시스템을 재부팅하여 문제를 해결했다고 생각합니다 ... TZ를 변경 한 후 cron 서비스를 다시 시작해야 할 수 있습니까? @ MichaelKjörling. 감사! 가능한 시간대 문제를 지적했습니다.
adsisco

답변:


7

우선, 하나의 필드가 잘못 간주되는 버그에 부딪 힐 확률은 매우 낮습니다. 무슨 일이 일어나고 있고 cron이 기대하는지에 대한 오해 일 가능성이 큽니다.

이 경우 시간대 관련 문제 일 가능성이 높은 질문에 대한 의견을 찾았습니다. 이를 위해 다음을 수행하십시오.

  • * * * * * datecrontab 과 같은 항목 추가
  • crontab에서 TZ 할당을 제거 하거나 주석 처리 하십시오.

이것은 date호출자의 시간대 설정으로 강제 실행되며, 이는 cron 디먼을 의미합니다 . 출력을보십시오. cron이 내부에서 사용하는 시간대를 보여 주므로 시간대를 원하는 시간대가 표시 될 가능성이 높습니다. crontab에 TZ 지정이 있으면 TZ 환경 변수 지정이 쉽게 전달 될 수 있습니다. 호출 된 명령 이지만 cron 자체는 다른 시간대를 사용합니다 . TZ 할당을 주석 처리하거나 제거하면 이러한 모호성을 피할 수 있습니다.

또한 시스템 전역 시간대 설정 (예 : / etc / localtime 포함)을 변경하려면 최소한 cron 데몬을 다시 시작해야하며 시스템을 재부팅하여 전체 효과를 적용 할 가능성은 거의 없습니다. crontab에서 TZ 할당을 편집하면 파일이 변경되었음을 자동으로 다시로드하므로 cron 데몬을 다시로드 하지 않아도됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.