/
cron 에서 초 단위로 스케줄링하기

cron 에서 초 단위로 스케줄링하기


cron 은 분 단위로 스케줄링하기 때문에 초 단위 스케줄링하려면 약간의 꽁수가 필요합니다.

스크립트에서 sleep 실행

먼저 다음과 같이 초 단위로 스케줄링할 실행할 명령어(run-every-x-seconds.sh)를 crontab 에 등록합니다.

crontab 설정
* * * * * /home/ec2-user/gist/run-every-x-seconds.sh


초 단위로 실행하려면 스크립트에서 loop 를 돌면서 주기적으로 sleep 후에 명령어를 실행하면 됩니다.

아래는 5초마다 echo 로 실행 시간을 출력하는 예제입니다.

run-every-x-seconds.sh
#!/usr/bin/env bash

SLEEP_SECOND=5

function some_task {
    echo $(date "+%Y-%m-%d %H:%M:%S") ;
}

for i in $(seq -s " " 1 ${SLEEP_SECOND} 60);do
    some_task
    sleep ${SLEEP_SECOND};
done


위 예에서 실행한 echo 구문은 지연될만한 요소가 없으므로 지정한 시간마다 실행되겠지만 만약 오래 걸리는 명령어를 실행한다면 "실행 시간" + "sleep 시간" 만큼 지연이 발생하게 됩니다.


만약 오래 걸리는 명령어라면 back ground 로 실행해 주면 됩니다.

run-every-x-seconds.sh
#!/usr/bin/env bash

SLEEP_SECOND=5

function some_task {
    echo $(date "+%Y-%m-%d %H:%M:%S") ;
}

for i in $(seq -s " " 1 ${SLEEP_SECOND} 60);do
    some_task &
    sleep ${SLEEP_SECOND};
done

중복 실행 방지

위 스크립트가 실행중일 때 1분이 지나면 다시 cron 에 의해 새로운 스크립트가 실행됩니다.

이를 방지하려면 실행 여부를 나타내는 파일을 하나 만들고 실행시 체크하면 됩니다.

 Click here to expand...

위 gist 는 "중복 실행" 방지가 되지 않는 문제가 있습니다.


같이 보기


Ref


Related content

리눅스 스케줄러 크론탭 사용법(Linux scheduler crontab)
리눅스 스케줄러 크론탭 사용법(Linux scheduler crontab)
More like this
cron 작업이 실패했을때만 이메일 전송하기
cron 작업이 실패했을때만 이메일 전송하기
More like this
linux cron 사용자별 접근 권한 설정하기
linux cron 사용자별 접근 권한 설정하기
More like this
Synology NAS 에서 crontab 사용
Synology NAS 에서 crontab 사용
More like this
yum-cron 으로 시스템 자동 업데이트
yum-cron 으로 시스템 자동 업데이트
More like this
rsync 사용법 - data backup 포함
rsync 사용법 - data backup 포함
More like this