/
리눅스 스케줄러 크론탭 사용법(Linux scheduler crontab)

리눅스 스케줄러 크론탭 사용법(Linux scheduler crontab)


cron 은 리눅스의 작업 스케줄러로 정해진 시간이나 주기마다 특정 작업을 실행할 수 있습니다.

TL;DR

현재 등록한 작업 목록 보기

$ crontab -l


작업 등록

현재 로그인한 사용자의 cron 작업을 편집하려면 -e 옵션을 주고 실행합니다.

$ crontab -e

매일 실행

새벽 2시 15분에 ls 명령어를 실행하고 결과를 lesstif 에게 메일 전송

MAILTO=lesstif
15 02 * * * ls

주말에만 실행

토요일, 일요일만 cron 으로 ls 명령어 실행

15 02 * * 6,7 ls

매달 첫 날 명령어 실행

매달 첫 요일 오전 2시 15분에 ls 명령어 실행

15 02 1 * * ls


3달마다 특정 명령어 실행

let's encrypt 인증서 갱신등 몇 달마다 실행해야 하는 명령어를 cron에 설정할 수 있습니다.


1,  4, 7, 10월에 1일 새벽 2시에 인증서 갱신

00 02 01 Jan,Apr,Jul,Oct * /usr/bin/certbot renew --nginx


아래처럼 할수도 있지만 가독성이 떨어지므로 주석으로 최초 실행일을 적어주는 것이 좋습니다.

# 1, 4, 7, 10월에 실행
00 02 01 */3 * /usr/bin/certbot renew --nginx

주의 사항

cron 은 보안 문제때문에 shell 의 초기화 설정 파일(.bash_profile, .profile 등)을 읽지 않습니다.

그래서 시스템의 기본 PATH(/bin, /usr/bin) 에 없는 파일이나 공유 라이브러리(share library)를 사용하는 프로그램이라면 cron 을 통해 실행할 때 직접 환경 변수를 넣어줘야 합니다.

일반적으로 cron 을 사용할 때는 다음 규칙을 따르는 게 좋습니다.

실행은 별도 스크립트로 분리

간단한 명령이 아닐 경우 별도의 실행 script 를 작성해서 실행합니다.

즉 다음과 같이 직접 crontab 에 적어주는 것 보다는

crontab
* * * * rsync -avzht --progress SRC DST > /dev/null 2>&1

아래와 같이 my-rsync.sh 스크립트를 별도로 작성해 줍니다.

my-rsync.sh
#!/bin/bash

rsync -avzht --progress SRC DST >/dev/null 2>&1

그리고 crontab 에는 실행 스크립트의 절대 경로를 등록해 주는 게 좋습니다.

crontab
* * * * /home/lesstif/bin/my-rsync.sh


절대 경로 사용

실행하려는 프로그램을이 /bin/이나 /usr/bin 에 있지 않다면 절대 경로로 적어주는 게 좋습니다.

즉 /usr/local/bin/php74 를 실행시에는 php74 보다는 /usr/local/bin/php74 로 절대 경로로 명시하는 게 좋습니다.

#!/bin/bash  

/usr/local/bin/php74  /var/www/some-script.php


실행에 필요한 환경 변수 지정

PATH 나 LD_LIBRARY_PATH 등 프로그램 실행에 필요한 변수가 있다면 실행 스크립트안에 명시적으로 적어 주는 게 실수를 방지할수 있습니다.

예로 실행 프로그램이 /usr/local/lib64 에 있는 공유 라이브러리를 참고한다면 다음과 같이 실행 스크립트에 변수를 추가해 줘야 합니다.

my-rsync.sh
#!/bin/bash

LD_LIBRARY_PATH=/usr/local/lib64

/usr/local/bin/myprog option1 


공유 라이브러리에 대한 내용은 동적 라이브러리(shared library)와 Linker/Loader 이해하기 를 참고하세요.

cron 사용 권한 설정

같이 보기

Ref

Related content

cron 에서 초 단위로 스케줄링하기
cron 에서 초 단위로 스케줄링하기
More like this
linux cron 사용자별 접근 권한 설정하기
linux cron 사용자별 접근 권한 설정하기
More like this
cron 작업이 실패했을때만 이메일 전송하기
cron 작업이 실패했을때만 이메일 전송하기
More like this
Synology NAS 에서 crontab 사용
Synology NAS 에서 crontab 사용
More like this
yum-cron 으로 시스템 자동 업데이트
yum-cron 으로 시스템 자동 업데이트
More like this
git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기
git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기
More like this