기타/명령어

Crontab에서 랜덤 실행 시간을 설정하는 방법

이영훈닷컴 2025. 1. 10. 08:52
728x90
0 1-23 * * * bash -c 'sleep $((RANDOM % 60)) && python3 파일위치'
0 1-23 * * * bash -c 'sleep $((RANDOM % 60)) && python3 파일위치'

crontab은 정해진 시간에 명령어를 실행할 수 있도록 하는 강력한 도구입니다. 하지만 기본적으로는 특정 시간에 고정된 작업만 설정할 수 있습니다. 이번 글에서는 랜덤 하게 실행 시간을 설정하거나, 실행 시점을 무작위로 조정하는 방법 3가지를 소개합니다.

 

1. sleep 명령어를 사용한 랜덤 딜레이

crontab에서 특정 시간에 작업을 실행하도록 설정한 뒤, 명령 실행 시점에서 sleep 명령어를 활용해 랜덤 딜레이를 추가하는 방법입니다.

크론탭 설정 예시

0 1-23 * * * sleep $((RANDOM % 60)) && python3 파일위치
0 1-23 * * * sleep $((RANDOM % 60)) && python3 파일위치

 

 

동작 방식
RANDOM: 0부터 32767 사이의 무작위 값을 생성합니다.
$((RANDOM % 60)): 0~59 사이의 값을 생성하여 분 단위로 랜덤 딜레이를 적용합니다.
sleep: 지정된 초(second)만큼 작업 실행을 지연시킵니다.

특징
매 시간 정각에 작업이 시작되지만, 실제 실행 시점은 랜덤한 시간(최대 59초) 이후입니다.

 

2. shuf 명령어를 활용한 랜덤 분 설정

shuf 명령어를 활용하여 매번 다른 랜덤 분(minute)에 작업을 실행하도록 설정하는 방법입니다.

크론탭 설정 예시

* 1-23 * * * [ $(shuf -i 0-59 -n 1) -eq $(date +\%M) ] && python3 파일위치
* 1-23 * * * [ $(shuf -i 0-59 -n 1) -eq $(date +\%M) ] && python3 파일위치

 

동작 방식
shuf -i 0-59 -n 1: 0~59 사이의 랜덤 숫자를 생성합니다.
date +%M: 현재 분을 가져옵니다.
두 값이 일치하면 명령어가 실행됩니다.

특징
매분마다 현재 분과 랜덤 분을 비교하므로, 실행 시점이 더 넓은 범위에서 무작위로 분포됩니다.

 

3. at 명령어와 함께 사용

at 명령어를 사용하면 특정 시간 이후에 작업을 예약할 수 있습니다. 이를 활용하여 crontab이 실행될 때 랜덤 한 시간 뒤에 작업을 수행하도록 설정할 수 있습니다.

크론탭 설정 예시

0 1-23 * * * echo "python3 파일위치" | at now + $((RANDOM % 60)) minutes
0 1-23 * * * echo "python3 파일위치" | at now + $((RANDOM % 60)) minutes

 

동작 방식
echo 실행할 명령어를 출력합니다.
at now + $((RANDOM % 60)) minutes: 현재 시간으로부터 랜덤한 분(minute) 이후에 작업을 예약합니다.

특징
at 명령어가 설치되어 있어야 하며, 시스템 리소스를 조금 더 사용하지만 실행 시점의 무작위성을 높입니다.

 

주의사항

필요한 명령어 설치 확인
shuf와 at 명령어가 설치되어 있는지 확인하세요:

which shuf
which at

만약 설치되어 있지 않다면 패키지 관리자를 사용해 설치하세요. (예: apt install coreutils at)

로그 확인
무작위 실행 설정이 잘 작동하는지 확인하려면 로그 파일을 활용하세요. 예를 들어, logger 명령어를 추가하여 실행 기록을 남길 수 있습니다.

sleep $((RANDOM % 60)) && python3 파일위치 && logger "dev.py executed"


시스템 부하

at 명령어와 랜덤 딜레이를 사용할 경우, 실행 시간이 겹쳐 시스템 부하가 증가할 수 있으니 주의하세요.

결론
crontab은 고정된 시간에만 작업을 실행할 수 있지만, sleep, shuf, at 명령어를 조합하면 무작위 실행 시간 설정이 가능합니다. 각 방법의 특징과 동작 방식을 고려해 자신에게 적합한 방법을 선택해 활용해 보세요!

728x90

'기타 > 명령어' 카테고리의 다른 글

서버 간 파일 복사하기 쉽고 안전한 방법  (0) 2025.01.02