cron 에 작업 등록 하면서 임의 시간에 실행 하기

1.cron 에 작업을 등록하여 반복 실행을 하고 싶은데,  정해진 시간이 아니고  랜덤으로 돌리고 싶은 경우가 있습니다.

 

예를 들면

  • 정해진 작업의 시작 시간은 있지만 작업이 동일한 순간에 몰리지 않도록 랜덤으로 분산하여 실행
  • 기계가 아닌 사람이 작업을 하는 것처럼 보이기 위해 임의의 랜덤 시간에 수행
  • 무언가의 탐지 규칙에 자동화, 반복화 등 비정상 행위에 탐지 않도록 랜덤 시간에 작업 ...( 크롤링 등..)
  • 주기에 의해 어떠한 작업을 수행하지만 그 작업을 한 시각을 모두 다르게 하고 싶은 경우
  • 이외에도  랜덤으로 작업을 해야 하는 경우 보다, 하고 싶은 경우가 생깁니다.

 

랜덤으로 작업을 하기 위한 방법은 어디서 어떻게 구현하느냐에 따라서 굉장히  많은 방법이 있습니다.


그 중 리눅스의 cron 에 작업을 등록 하고, 실행은 임의 시간에서 하는 아주 간단한 방법입니다.

 

리눅스에서는 이 방법이 제일 간편하고 제일 좋습니다.


2.랜덤으로 실행 하는 방법 입니다.

 

랜덤 시간을 발생시키기 위한 random 명령어와 일정 시간 후 실행시키기 위한 sleep 명령어를 사용 합니다.

* * * * * sleep ${RANDOM:0:2}m ; /path/to/script

위에서 RANDOM은 0-32767 사이의 랜덤한 숫자를 리턴 하는데, :0:2를 통해 앞에 2자리만 가져 옵니다.

즉, sleep ${RANDOM:0:2}m 의 의미는 '랜덤으로 발생한 2자리 수 분(m) 만큼 sleep '이 됩니다.

 

>> 0-99 사이 임의 숫자가 선택이 되고, 이 만큼 sleep 했다가 >> 그 후 /path/to/script 가 실행 되는 구조 입니다.


3.실제 적용 예시 입니다.

# vim /etc/crontab
..
...
....
*/10 * * * * root sleep ${RANDOM:0:1}m; /data/data/get_payment_stastics.sh

 

이 작업을 보겠습니다.

 

  • cron 의 설정에 의하여 */10 매 10분간격으로 반복 실행 하도록 하였습니다.
  • 작업은 root 계정을 사용하고 sleep ${RANDOM:0:1}m; /data/data/get_payment_stastics.sh 를 실행 합니다.
  • sleep ${RANDOM:0:1}m; 에 의하여 1~9분 사이 랜덤 수만큼 sleep 을 수행 하고,
  • 이후 /data/data/get_payment_stastics.sh 를 실행 합니다.

 

>>>> 위 작업은 최종 매 10-19 분 사이에 실행 되고 종료 되는 형태가 됩니다. 쉽죠?

 

"이론이 아닌 실제 현업에서 사용 하는 방법입니다."