Я разрабатываю скрипт оболочки ksh на сервере AIX, который должен выполняться точно в 13:00 каждого дня. У меня нет разрешения на использование CRONTAB, AT, WATCH, inotify, date -d и т.д. Единственный вариант - заставить скрипт постоянно циклиться и работать в фоновом режиме.
while [ $(date +%H%M) != 1300 ]
do
actions
sleep 60
done
Я попробовал вышеприведенный код, но я не хочу, чтобы while
выполнялся непрерывно в фоновом режиме, пока условие не станет истинным. Предложите мне другой способ использовать sleep
или while
цикл или любой другой, который выполняется только один раз, а не непрерывно.
Я делал это только в 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 завтра" +%s
.