Action disabled: source

Crontab (Linux)

cron(크론)은 원하는 시간에 명령(프로그램)을 시키기 위한 데몬이다. 서버는 늘 깨어있다는 것을 이용한 최대한의 활용법이 될 수 있다.

  1. 내가 새벽 3시에 서버에 특정 작업을 해줘야하는데 그 때 깨어있을 수 있는가?
  2. 또는 30분간격으로 HDD의 사용량을 운영자에게 알리도록 해야한다면?
  3. 매월 초에 자료를 백업 받고 싶다면?
crontab -l              # 현재 crontab에 등록된 작업보기
crontab -e              # crontab 편집하기

시간 설정에서 몇가지 의미있는 것들을 알아보자.

  • '*'표시는 해당 필드의 모든 시간을 의미한다.
  • 3,5,7 와 같이 콤마(,)로 구분하여 여러 시간대를 지정할 수 있다.
  • 2-10와 같이 하이픈(-)으로 시간 범위도 지정할 수 있다.
  • 2-10/3와 같이 하이픈(-)으로 시간 범위를 슬래쉬(/)로 시간 간격을 지정할 수 있다. (2~10까지 3간격으로. 즉, 3,6,9를 의미함)
분 시 일 월 주  실행할 내용

형식이다.

밑의 예제를 참고하고 원하는 설정 알려주시는 갓양님 사이트 https://crontab.guru/ 를 해보자.

매주 토요일 새벽 2:20 
20 2 * * 6 명령어
매일 새벽 4시
1 4 * * * 명령어
매월 1일 새벽 1:15 
15 1 1 * * 명령어
매일 오전 4,5,6시 
0 4-6 * * * 명령어
매일 2시간간격으로 5분대에 
5 */2 * * * 명령어
1,7월 1일 새벽 0:30 
30 0 1 1,7 * 명령어
# save every 3 min
*/3 * * * * /home/mine/bin/mc1 save
# restart at 11:55am & 11:55pm
55 11,23 * * * /home/mine/bin/mc1 restart
#2개월마다 3일 3시 33분
33 3 3 */2 * /opt/letsencrypt/certbot-auto renew

정기적으로 PHP 실행

 52 *  * * * wget -p --spider http://openwiki.kr/bb/rssboard.cron.php

매시각 52분에 원격의 php 파일을 실행함.

로그

잘실행되고 있는지 로그를 확인하려면

명령어 뒤에 >> /home/user/crontab.log

우분투 서버버전에서 crontab 사용해보려고 했는데 /var/log 에 crontab 로그파일이 남겨져 있지 않아서 왜 그런지 찾아보니 기본설정이 로그가 남겨지지 않도록 되어있었다. 다음과 같이 로그 관련 데몬 설정 파일을 수정하고 데몬을 재시작 시켜 주면 된다.

sudo vi /etc/syslog.conf

파일 열어서 crontab 찾아서 코멘트 되어 있는 부분 풀어준다.

기타

cron 설정파일 저장위치

cd /var/spool/cron/crontabs

여기 들어가면 각 유저별(유저명) cron 설정파일이 들어있다. 직접 변경하려면 Root 권한 필요.

필요없는 이메일 알림 없애기

명령을 수행하고 나서 결과를 이메일로 보내려는 시도를 하는데, 귀찮다.

각 명령어의 끝에 > /dev/null 를 붙임.

혹은

맨 위에

MAILTO=""

추가

필요없는 syslog

/var/log/syslog

이 파일을 보면 크론이 실행될 때마다 로그가 쌓이는 것을 볼 수 있다. 별 내용도 없고 꼴보기 싫으니 없애보자.

rsyslog

sudo nano /etc/rsyslog.d/50-default.conf

파일을 보면

  *.*;auth,authpriv.none     -/var/log/syslog

라는 항목이 있는데 이곳에 cron.none 을 추가하면 된다.

  *.*;auth,authpriv.none,cron.none     -/var/log/syslog

그리고 당연히 디먼 재시작

sudo service rsyslog restart

다른 방법

https://languor.us/cron-pam-unix-cron-session-session-opened-closed-user-root-uid0

Go to the /etc/pam.d directory.
Open the file common-session-noninteractive in an editor.
Look for the following line:
session required        pam_unix.so
Above this line, add the following:
session     [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid
Save the file and exit.
Restart crond using something like service cron restart.

역링크