Scheduling without CRON

  • 윈도에서 반복 작업은 작업 스케줄러를 사용합니다.
  • 리눅스에서는 cron을 사용합니다.
  • 그런데 cron을 사용할 수 없어서 다른 방법을 찾았습니다.

1. crontab

wikipedia: cron
O! JAVA: [Linux]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로 재시작할 수 있고, stopstart를 할 수도 있습니다.
    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

Coderwall: Scheduling jobs in UNIX without cron
while 루프

  • 약간의 불행을 겪고 있습니다.

  • cron을 어떻게 조작해도 오류가 발생하고, 작업 스케줄링이 되지 않습니다.
    PAM은 왜...

  • 오류를 해결하고자 구글링을 한 결과 여러 시도를 찾았습니다.

  • shell script를 사용해서 작업을 할 수 있더군요.

  • while do만 사용해서 더 간단한 반복 코드를 작성했습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash

    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
    2
    nohup script파일.sh > 로그파일.log 2>&1 &
    echo $! > PID파일.txt


도움이 되셨나요? 카페인을 투입하시면 다음 포스팅으로 변환됩니다

Share