Crontab
유닉스 OS 계열에서 특정 시간에 특정 작업을 해야하는 경우 사용하는 스케쥴러입니다.
crontab basic
스케쥴 설정
아래의 커멘드를 입력하면 스케줄을 설정할수 있는 vi 에디터 페이지가 생성된다. 여기에 어떤 주기로 어떤 파일을 실행할지에 대한 리스트를 작성해주면 된다.
1
crontab -e
스케쥴 리스트 확인
현재 crontab의 스케쥴을 확인할 수 있다.
1
crontab -l
주기 설정
1
2
3
4
5vi 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(" ")[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 >> 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