cron(크론)은 원하는 시간에 명령(프로그램)을 시키기 위한 데몬이다. 서버는 늘 깨어있다는 것을 이용한 최대한의 활용법이 될 수 있다.
crontab -l # 현재 crontab에 등록된 작업보기
crontab -e # crontab 편집하기
시간 설정에서 몇가지 의미있는 것들을 알아보자.
분 시 일 월 주 실행할 내용
형식이다.
밑의 예제를 참고하고 원하는 설정 알려주시는 갓양님 사이트 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
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 찾아서 코멘트 되어 있는 부분 풀어준다.
cd /var/spool/cron/crontabs
여기 들어가면 각 유저별(유저명) cron 설정파일이 들어있다. 직접 변경하려면 Root 권한 필요.
명령을 수행하고 나서 결과를 이메일로 보내려는 시도를 하는데, 귀찮다.
각 명령어의 끝에 > /dev/null
를 붙임.
혹은
맨 위에
MAILTO=""
추가
/var/log/syslog
이 파일을 보면 크론이 실행될 때마다 로그가 쌓이는 것을 볼 수 있다. 별 내용도 없고 꼴보기 싫으니 없애보자.
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.