
저는 AIX 서버에서 매일 13시에 정확히 실행되어야 하는 ksh 쉘 스크립트를 개발 중입니다. CRONTAB, AT, WATCH, inotify, date -d 등을 사용할 권한이 없습니다. 유일한 옵션은 스크립트를 지속적으로 반복하고 백그라운드에서 실행하도록 만드는 것입니다.
while [ $(date +%H%M) != 1300 ]
do
actions
sleep 60
done
while
위의 코드를 시도했지만 조건이 true가 될 때까지 백그라운드에서 계속 실행되는 것을 원하지 않습니다 . 계속해서 실행하는 대신 한 번만 실행하는 방법 sleep
이나 루프를 사용하는 방법을 제안해 주세요 .while
답변1
나는 에서만 이 작업을 수행했으며 perl
을 사용한 적이 없지만 ksh
왜 가능하지 않아야 하는지는 알 수 없지만 다음과 같이 수행했습니다(아마 어떤 언어에서도 유효한 코드가 아닐 수 있음).
while(true)
starttime=`date +%s`
actions
sleep starttime+24*60*60-`date +%s`
end
그러면 24시간마다 작업이 시작됩니다. 내 생각은 13:00에 실행되도록 하려면 시작 부분에 13:00까지 기다리는 루프를 추가하는 것이었습니다. 생각해보면 starttime+24*60*60
와 같은 것으로 교체하는 것이 더 나을 수도 있습니다 date -d "13:00 tomorrow" +%s
.