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 분 사이에 실행 되고 종료 되는 형태가 됩니다. 쉽죠?
"이론이 아닌 실제 현업에서 사용 하는 방법입니다."
끝
'리눅스와 쉘' 카테고리의 다른 글
임의 사용자가 방화벽 (firewalld) 중지 못하도록 제어 방법 (0) | 2023.09.06 |
---|---|
시스템에서 실행 중 서비스의 설치 패키지(rpm) 확인 (0) | 2023.09.05 |
파일, 디렉토리 권한(퍼미션)을 644 666 등 숫자로 보기 (0) | 2023.09.04 |
tar 압축시 특정 디렉토리 제외하고 압축하기 (0) | 2023.06.29 |
RockyLinux 8에 python 설치 & virtualenv 구성방법 (0) | 2023.06.13 |