Intereting Posts
Как распечатать символ разделителя и разрешить пользователю редактировать строку при чтении стандартного ввода? Отношения между командой «sudo su ls» и «sudo ls» Не получать libglib2.0-dev (обновленные библиотеки) даже после обновления с Ubuntu 14.04 до 16.06 Ужасная ситуация – файловые системы, смонтированные одновременно несколькими независимыми экземплярами ОС Настройка статического IP-адреса в redhat 6 Установка Internetless / Remote Arch / Библиотека: операция не разрешена при входе в систему как пользователь root Как предотвратить закрытие приложения python в Linux? Мини-роутер Open WRT: установка мобильного модема Кто отрезает первый символ файла замещения процесса и по какой причине? как получить данные из результата grep? Запуск Debian jessie, отсутствие некоторых пакетов __modver_version_show undefined ошибка во время make Переадресация файла на процесс Звук внезапно не работает на Debian 9

Cronjob на основе системного времени или его собственного времени

Cronjob основывается на системном времени или времени своего времени? Если это системное время, когда я меняю системное время вручную, будет ли cronjob следовать за новым временем настройки соответственно?

cron использует системные часы, которые он проверяет каждую минуту. Для внесения изменений в системные часы может оказаться полезным следующий отрывок из man страницы:

Особые соображения существуют, когда часы меняются менее чем на 3 часа, например, в начале и в конце летнего времени. Если время переместится вперед, те задания, которые были бы запущены за время, которое было пропущено, будут запущены вскоре после изменения. И наоборот, если время переместится назад менее чем на 3 часа, те задания, которые попадают в повторное время, не будут повторно запущены.

Если вы перемещаете свои часы с 12:04 до 12:06, и у вас запланировано задание на 12:05, они не будут работать.

Если вам нужно выполнять задание в 12:05 каждый день или при первой возможности после этого (после включения питания или системных часов), то выполняйте эту работу каждую минуту (или с более длинным интервалом, если это приемлемо), и его скрипт проверяет, был ли этот последний сеанс запущен в этот день на основе некоторого файла состояния. Если этот файл статуса существует и обновляется, скрипт должен немедленно выйти (т.е. он запустился в 12:05 или как можно раньше, чтобы запустить его). Если нет, установите файл состояния и запустите оставшуюся часть скрипта, поэтому любые дальнейшие вызовы ничего не сделают, пока часы не достигнут 12:05 на следующий день.

Особенно, если задание занимает больше времени, важно сначала обновить файл состояния, а затем продолжить выполнение, иначе проверка 12:06 не найдет обновленный статус и не начнет параллельное выполнение другого задания.