- 윈도에서 반복 작업은 작업 스케줄러를 사용합니다.
- 리눅스에서는 cron을 사용합니다.
- 그런데 cron을 사용할 수 없어서 다른 방법을 찾았습니다.
1. crontab
- Unix 계열에서 주기적으로 수행될 작업을 등록하여 실행하는 도구입니다.
- 1975년에 AT&T Bell 연구소에서 만들어졌습니다.
- 여러 분들이 사용법을 잘 정리하셨으니 여기에는 간단하게만 정리합니다.
- cron을 설정하려면 crontab(cron table)에 등록하거나 등록된 내용을 수정합니다.
1
2
3
4$ crontab -l # 등록 작업 리스트 출력
$ crontab -e # 등록 작업 편집
$ crontab -d # 등록 작업 삭제
$ crontab -r # 현재 사용자가 등록한 crontab 전체 삭제 - 이와 같이 crontab을 설정하면, 데몬을 재시작해야 적용됩니다.
restart
로 재시작할 수 있고,stop
후start
를 할 수도 있습니다.1
2
3
4
5
6
7
8
9# Ubuntu
$ service cron restart # 재시작
$ service cron stop # 현재 cron 중지
$ service cron start # cron 시작
# CentOS
$ service crond restart # 재시작
$ service crond stop # 현재 cron 중지
$ service crond start # cron 시작- cron이 잘 실행되는지는 log 파일을 모니터링하면 알 수 있습니다.
tail -f
를 사용하면 실시간으로 파일이 업데이트되는 모습을 볼 수 있습니다.1
2
3
4
5# Ubuntu
$ tail -f /var/log/syslog | grep CRON
# CentOS
$ tail -f /var/log/cron
2. shell script
약간의 불행을 겪고 있습니다.
cron을 어떻게 조작해도 오류가 발생하고, 작업 스케줄링이 되지 않습니다.
오류를 해결하고자 구글링을 한 결과 여러 시도를 찾았습니다.
shell script를 사용해서 작업을 할 수 있더군요.
while do
만 사용해서 더 간단한 반복 코드를 작성했습니다.1
2
3
4
5
6
7
8
9
while true; # 무한 반복
do
echo `date` # 실행 코드. 파이썬 실행이라면 `date` 대신 `python 파일명.py`
sleep 10 # 10초 대기
done실행 결과: 10초마다 시간이 출력됩니다.
nohup
과&
를 붙여 백그라운드 실행을 하면 다른 작업을 할 수 있습니다.- 이 때 화면 출력(standard output)은 기본적으로 nohup.out에 기록됩니다.
3. nohup task 관리
nohup으로 던져진 작업은 터미널 창을 닫아도 유지됩니다.
자칫하면 무한 반복에 빠질 수 있습니다.
kill
명령을 사용하기 위해서라도 PID를 알아야 합니다.아래 명령으로 현재 실행중인 nohup 작업의 PID를 알 수 있습니다.
1
ps -ef | grep nohup
하지만 더 좋은 것은 작업을 시작할 때 PID를 기록하는 것입니다.
여러 nohup작업을 관리하려면 각각의 PID를 정리할 필요가 있기 때문입니다.
nohup을 다음과 같이 실행해서 기록할 수 있습니다.
1
2nohup script파일.sh > 로그파일.log 2>&1 &
echo $! > PID파일.txt