당신은이 */30
에 분 지정자 - 즉, 매 순간하지만 (즉, 매 30 시간) 30 단계. cron
1 분 미만의 해상도로 내려 가지 않기 때문에 다른 방법을 찾아야합니다.
약간의 kludge (a) 이지만 한 가지 가능성 은 두 가지 작업을 갖는 것입니다. 하나는 30 초씩 오프셋됩니다.
# Need these to run on 30-sec boundaries, keep commands in sync.
* * * * * /path/to/executable param1 param2
* * * * * ( sleep 30 ; /path/to/executable param1 param2 )
주석을 추가하고 동기화하기 쉽도록 형식을 지정했습니다.
두 cron
작업은 실제로 1 분마다 실행되지만 후자 는 작업의 "고기"를 실행하기 전에 30 분을 기다립니다 /path/to/executable
.
기타 (비 대한 cron
기반) 옵션, 여기에 다른 답변, 언급 특히 사람보고 fcron
와 systemd
. 시스템에 시스템을 설치 fcron
하거나 배포 하는 등의 기능을 사용할 수 있다고 가정하면이 방법이 바람직합니다 systemd
.
당신이 경우 하지 않는 미봉책 솔루션을 사용하려면, 당신은 작은 수정을 가진 루프 기반의 솔루션을 사용할 수 있습니다. 프로세스를 어떤 형태로 계속 실행하도록 관리해야하지만 일단 정렬되면 다음 스크립트가 작동해야합니다.
#!/bin/env bash
# Debug code to start on minute boundary and to
# gradually increase maximum payload duration to
# see what happens when the payload exceeds 30 seconds.
((maxtime = 20))
while [[ "$(date +%S)" != "00" ]]; do true; done
while true; do
# Start a background timer BEFORE the payload runs.
sleep 30 &
# Execute the payload, some random duration up to the limit.
# Extra blank line if excess payload.
((delay = RANDOM % maxtime + 1))
((maxtime += 1))
echo "$(date) Sleeping for ${delay} seconds (max ${maxtime})."
[[ ${delay} -gt 30 ]] && echo
sleep ${delay}
# Wait for timer to finish before next cycle.
wait
done
요령은 페이로드가 실행되기 전에 백그라운드sleep 30
에서 시작하지만 백그라운드 에서 시작하는 것입니다 . 그런 다음 페이로드가 완료된 후 백그라운드 sleep
가 완료 될 때까지 기다리십시오 .
페이로드에 n
초 (where n <= 30
) 가 걸리면 페이로드 이후의 대기 30 - n
시간은 초입니다. 걸리는 경우 보다 30 초 이상 페이로드가 더 이상 완료,하지만 때까지, 그 다음 사이클이 지연되지 않습니다.
출력을 처음에 더 쉽게 따르기 위해 1 분 경계에서 시작하기 위해 디버그 코드가 있음을 알 수 있습니다. 또한 페이로드가 30 초주기 시간을 초과하는 것을 볼 수 있도록 최대 페이로드 시간을 점차적으로 늘립니다 (공백이 추가되어 효과가 분명함).
샘플 실행은 다음과 같습니다 (여기에서 사이클은 이전 사이클 후 30 초 후에 시작 함).
Tue May 26 20:56:00 AWST 2020 Sleeping for 9 seconds (max 21).
Tue May 26 20:56:30 AWST 2020 Sleeping for 19 seconds (max 22).
Tue May 26 20:57:00 AWST 2020 Sleeping for 9 seconds (max 23).
Tue May 26 20:57:30 AWST 2020 Sleeping for 7 seconds (max 24).
Tue May 26 20:58:00 AWST 2020 Sleeping for 2 seconds (max 25).
Tue May 26 20:58:30 AWST 2020 Sleeping for 8 seconds (max 26).
Tue May 26 20:59:00 AWST 2020 Sleeping for 20 seconds (max 27).
Tue May 26 20:59:30 AWST 2020 Sleeping for 25 seconds (max 28).
Tue May 26 21:00:00 AWST 2020 Sleeping for 5 seconds (max 29).
Tue May 26 21:00:30 AWST 2020 Sleeping for 6 seconds (max 30).
Tue May 26 21:01:00 AWST 2020 Sleeping for 27 seconds (max 31).
Tue May 26 21:01:30 AWST 2020 Sleeping for 25 seconds (max 32).
Tue May 26 21:02:00 AWST 2020 Sleeping for 15 seconds (max 33).
Tue May 26 21:02:30 AWST 2020 Sleeping for 10 seconds (max 34).
Tue May 26 21:03:00 AWST 2020 Sleeping for 5 seconds (max 35).
Tue May 26 21:03:30 AWST 2020 Sleeping for 35 seconds (max 36).
Tue May 26 21:04:05 AWST 2020 Sleeping for 2 seconds (max 37).
Tue May 26 21:04:35 AWST 2020 Sleeping for 20 seconds (max 38).
Tue May 26 21:05:05 AWST 2020 Sleeping for 22 seconds (max 39).
Tue May 26 21:05:35 AWST 2020 Sleeping for 18 seconds (max 40).
Tue May 26 21:06:05 AWST 2020 Sleeping for 33 seconds (max 41).
Tue May 26 21:06:38 AWST 2020 Sleeping for 31 seconds (max 42).
Tue May 26 21:07:09 AWST 2020 Sleeping for 6 seconds (max 43).
클루 지 솔루션을 피하려면이 방법이 더 좋습니다. cron
이 스크립트가 실행 중인지 정기적으로 감지하고 시작하지 않으면 시작 하는 작업 (또는 이와 동등한) 이 여전히 필요 합니다. 그러나 스크립트 자체는 타이밍을 처리합니다.
(a) 직장 동료 중 일부는 kludges가 내 전문이라고 말합니다.