내 문제는 cron 작업과 다소 관련이 있다고 생각하지만 완전히 확실하지는 않습니다.
/home/me/myscript.sh
완료하는 데 불확실한 시간(예: 10분에서 1시간)이 걸릴 수 있는 작업을 수행하는 스크립트( )가 있다고 가정해 보겠습니다 . 내가 원하는 것은 스크립트를 실행한 다음 완료 후 한 시간 이내에 다시 실행하는 것입니다. 이를 달성하기 위해 사용할 수 있는 "스케줄러"나 어떤 것이 있습니까? 저는 우분투를 사용하고 있습니다.
답변1
cron
이 작업에는 적합하지 않은 것 같습니다. 마지막 실행이 완료된 후 1시간 후에 루프를 통해 while
수행할 수 있습니다.
#!/bin/sh
while :; do
some_job_that_takes_a_while
sleep 3600
done
또는 at(1)
작업이 종료되면 1시간 이내에 다음 실행을 예약합니다.
$ cat atat
#!/bin/sh
echo running the job
echo $HOME/atat | at now + 1 hours
$ ./atat
running the job
job 4 at 2015-09-30 17:00
$ date
Wed Sep 30 16:00:19 UTC 2015
$
누군가 수동으로 해당 작업을 종료하고 다시 시작할 때까지 후속 작업이 실행되지 않도록 중단되는 경우를 대비하여 온전성 검사 또는 timeout
작업 내 검사가 필요할 수 있습니다.
답변2
가장 쉬운 방법은 cron에게 그렇게 하도록 지시하는 것입니다. cron이 실행할 명령으로 사용하십시오.
/home/me/myscript.sh; sleep 1h; /home/me/myscript.sh
sleep
이 접미사를 지원하지 않으면 대신 h
사용하세요 sleep 3600
.
또는 이를 호출하는 래퍼 스크립트를 작성하세요 wrapper.sh
.
#!/usr/bin/env bash
/home/me/myscript.sh
sleep 1h
/home/me/myscript.sh
cron으로 실행해 보세요.