스크립트에서 스케줄링하기

셸 스크립트의 경우 기존 태스크를 루프로 감싸고 안에서 sleep만 걸어주면 된다. 다른 언어를 사용중이라면 각 언어별로 내장된 sleep 함수를 사용하면 된다.
# original.
task;

# 2 seconds interval.
for i in {1..30}; do
task;
sleep 2;
done


그 다음 crontab에 1분 스케줄링을 걸어준다.
# crontab
* * * * * /bin/sh /path/to/script.sh


sleep 시간을 동적으로 설정하려면 sleep 시간을 받을 수 있도록 할 수도 있다.
n=$1
# n seconds interval.
for i in $(seq $((60/$n))); do
task;
sleep $n;
done

# crontab
* * * * * /bin/sh /path/to/script.sh 2


그런데 만약 task 실행 시간이 충분히 짧지 않다면 실질적인 sleep 시간은 task 실행시간 + sleep 시간이 되기 때문에 스케줄링에 오차가 생길 수 있다. 이 경우는 task를 백그라운드로 실행하면된다.
n=$1
# n seconds interval.
for i in $(seq $((60/$n))); do
task &;
sleep $n;
done


Crontab에서 스케줄링하기

crontab 등록시 스크립트 실행 이전에 sleep을 걸어주면 된다. 단, 첫 스케줄잡은 제외한다. 스크립트를 수정하지 않아도 되기 때문에 가장 편하게 사용할 수 있는 방법이다.
# crontab
* * * * * /bin/sh /path/to/script.sh
* * * * * sleep 10; /bin/sh /path/to/script.sh
* * * * * sleep 20; /bin/sh /path/to/script.sh
* * * * * sleep 30; /bin/sh /path/to/script.sh
* * * * * sleep 40; /bin/sh /path/to/script.sh
* * * * * sleep 50; /bin/sh /path/to/script.sh


1분마다 모두 동시에 실행되지만 sleep이 있어 작업이 지연되므로 10초 간격으로 스케줄링된 것처럼 동작한다

 

출처 : https://mingrammer.com/scheduling-cron-job-in-seconds-interval/#crontab에서-스케줄링하기

Posted by 꼬장 꼬장e

댓글을 달아 주세요