Page tree

Contents


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

현재 등록한 작업 목록 보기

$ crontab -l


작업 등록

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

$ crontab -e


cron.allow 와 cron.deny 사용 권한

사용자들의 cron 사용 권한을 다음 규칙에 따라 설정할 수 있습니다.

  1. /etc/cron.allow/etc/cron.allow 파일이 있을 경우 이 안에 등록된 사용자만 cron 을 사용 가능
  2. /etc/cron.allow 이 없고 /etc/cron.deny 가 있을 경우 /etc/cron.deny  에 지정된 사용자는 실행 불가
  3. 2 파일이 모두 없을 경우 super user 만 cron 사용 가능

주의 사항

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 스크립트를 작성하고 crontab 에는 스크립트의 절대 경로를 적어 주는 게 좋습니다.

my-rsync.sh
#!/bin/bash

 rsync -avzht --progress SRC DST >/dev/null 2>&1
crontab
* * * * /home/lesstif/bin/my-rsync.sh


절대 경로 사용

실행하려는 프로그램이 /bin/이나 /usr/bin 에 있지 않다면 절대 경로로 적어주는 게 좋습니다. 즉 /usr/local/bin/myprog 를 실행시에는 myprog 보다는 /usr/local/bin/myprog 로 절대 경로로 명시하는 게 좋습니다.

#!/bin/bash

/usr/local/bin/myprog option


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

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 이해하기 를 참고하세요.

사용 예제

3달마다 특정 명령어 실행

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


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



같이 보기


Ref

  • No labels

This page has no comments.