Crontab

  • 유닉스 OS 계열에서 특정 시간에 특정 작업을 해야하는 경우 사용하는 스케쥴러입니다.

  • crontab basic

    • 스케쥴 설정

      아래의 커멘드를 입력하면 스케줄을 설정할수 있는 vi 에디터 페이지가 생성된다. 여기에 어떤 주기로 어떤 파일을 실행할지에 대한 리스트를 작성해주면 된다.

      1
      $ crontab -e
    • 스케쥴 리스트 확인

      현재 crontab의 스케쥴을 확인할 수 있다.

      1
      $ crontab -l
  • 주기 설정

    1
    2
    3
    4
    5
    vi time.py

    import datetime
    today = datetime.datetime.now()
    print(str(today))
    • crontab -e 설정

    • * * * * * ->
      분(0-59) | 시간(0-23) | 일(1-31) | 월(1-12) | 요일(0-7)

      • 요일에서 0과 7은 일요일

      • 2분 간격으로 실행

        1
        */2 * * * * python3 /home/ubuntu/time.py >> time.txt
      • 매시 10분에 실행

        1
        10 * * * * python3 /home/ubuntu/time.py >> time.txt
      • 매시 10분과 20분에 실행

        1
        10,20 * * * * python3 /home/ubuntu/time.py >> time.txt
      • 매일 5시 10분과 20분에 실행

        1
        10,20 5 * * * python3 /home/ubuntu/time.py >> time.txt
      • 일요일 5시 10분과 20분에 실행

        1
        10,20 5 * * 0 python3 /home/ubuntu/time.py >> time.txt
      • 5시에서 10시까지 매시에 5분마다 time.py를 실행하고 결과를 time.txt에 저장

        1
        */5 5-10 * * 0 python3 /home/ubuntu/time.py >> time.txt
  • time zone 변경

    타임존 변경

    • 현재 사용 시간 확인

      $ timedatectl

    • 사용하는 파일 심볼릭 링크확인

      $ ls -l /etc/localtime

    • 사용 할수 있는 타임존 확인

      $ timedatectl list-timezones | grep Asia

    • 타임존 변경

      $ sudo timedatectl set-timezone Asia/Seoul

    • 심볼릭 링크 수정

      $ sudo unlink /etc/localtime

      $ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

  • vim 에디터 인코딩 변경

    $ vi .vimrc

    set encoding=utf-8

  • crontab 로그 확인

    아래의 명령으로 crontab의 시스템 로그를 확인 할수 있습니다.

    $ grep CRON /var/log/syslog

  • crontab 에러 확인 및 해결

    에러가 발생하면 아래와 같은 에러 로그를 확인할수 있습니다.

    Mar 4 07:42:01 ip-172-31-3-64 CRON[7494]: (CRON) info (No MTA installed,
    discarding output)

- MTA : Mail Transfer Agent
- 에러 메시지 확인하는 방법 1
    - $ sudo apt-get install postfix
    - $ cat /var/mail/ubuntu
- 에러 메시지 확인하는 방법 2
    - $ sudo apt install mailutils
    - $ mail
- crontab에서 실행되는 python 환경

    - crontab 에서는 .bash_profile이 실행되지 않기때문에 pyenv 환경이 적용되지 않습니다.

        <!--hexoPostRenderEscape:<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">vi version.py</span><br><span class="line"></span><br><span class="line">import sys</span><br><span class="line">print(sys.version.split(&quot; &quot;)[0])</span><br></pre></td></tr></table></figure>:hexoPostRenderEscape-->

        <!--hexoPostRenderEscape:<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">crontab -e</span><br><span class="line"></span><br><span class="line">\* \* \* \* \* python /home/ubuntu/version.py &gt;&gt; version.txt</span><br></pre></td></tr></table></figure>:hexoPostRenderEscape-->

- pyenv 환경에 있는 python으로 실행

    -  직접 python 경로 입력

       \* \* \* \* \* /home/ubuntu/.pyenv/versions/python3/bin/python /home/ubuntu/version.py >> version.txt

    - PATH 설정

      PATH=/usr/local/bin/:/sbin:/bin:/usr/sbin:/home/ubuntu/.pyenv/versions/python3/bin

      \* \* \* \* \* python /home/ubuntu/version.py >> version.txt