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