- 윈도에서 반복 작업은 작업 스케줄러를 사용합니다.
- 리눅스에서는 cron을 사용합니다.
- 그런데 cron을 사용할 수 없어서 다른 방법을 찾았습니다.
1. crontab
- Unix 계열에서 주기적으로 수행될 작업을 등록하여 실행하는 도구입니다.
- 1975년에 AT&T Bell 연구소에서 만들어졌습니다.
- 여러 분들이 사용법을 잘 정리하셨으니 여기에는 간단하게만 정리합니다.
- cron을 설정하려면 crontab(cron table)에 등록하거나 등록된 내용을 수정합니다.
1 | $ crontab -l # 등록 작업 리스트 출력 |
* 이와 같이 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 |
|
-
실행 결과: 10초마다 시간이 출력됩니다.

-
nohup과&를 붙여 백그라운드 실행을 하면 다른 작업을 할 수 있습니다. -
이 때 화면 출력(standard output)은 기본적으로 nohup.out에 기록됩니다.

3. nohup task 관리
- nohup으로 던져진 작업은 터미널 창을 닫아도 유지됩니다.
- 자칫하면 무한 반복에 빠질 수 있습니다.
kill명령을 사용하기 위해서라도 PID를 알아야 합니다. - 아래 명령으로 현재 실행중인 nohup 작업의 PID를 알 수 있습니다.
1 | ps -ef | grep nohup |
- 하지만 더 좋은 것은 작업을 시작할 때 PID를 기록하는 것입니다.
- 여러 nohup작업을 관리하려면 각각의 PID를 정리할 필요가 있기 때문입니다.
- nohup을 다음과 같이 실행해서 기록할 수 있습니다.
1 | nohup script파일.sh > 로그파일.log 2>&1 & |