Как работают внутренние работы демона cron?

Я хочу знать, как cron работает внутри. Проверяет ли процесс текущее время в бесконечном цикле (таким образом, постоянно потребляя циклы процессора)? Или какая-то функция генерирует прерывание и уведомляет демона cron ?

2 Solutions collect form web for “Как работают внутренние работы демона cron?”

Однажды я прочитал исходный код vixie-cron и должен был быть госпитализирован. Однако, если вы ищете, чтобы «некоторая функция генерировала прерывание» одновременно, вы должны исследовать системный вызов alarm(2) . Он просит ядро ​​отправить вам сигнал SIGALRM в запланированное время, которое вы затем можете поймать. Тем временем ваш процесс может сделать что-то еще или sleep() , как в больнице.

Я уверен, что существует множество вариаций, так как он работает в dcron, так это то, что он спит до 60 секунд за раз, он пытается синхронизировать это, спая меньше, если необходимо, чтобы проснуться через 00 секунд.

Он использует sleep() который заставляет процесс спать (если не возникает сигнал) без использования CPU. Когда он просыпается, он проверяет файл cron.update (созданный редактированием crontab ). При необходимости он обновляет свою очередь выполнения, запускает ожидаемые задачи и снова спит.

Я никогда не видел, чтобы кто-то из кронов работал чаще, чем один раз в минуту, так что обычно это достаточно легко для ресурсов.

Под linux, если вы смотрите в /proc на такие вещи, как чтение / запись байтов или iowait для crond вы можете увидеть, что он имеет относительно высокий уровень использования, потому что он заканчивает учет всех дочерних процессов, которые он запускает, например, на Centos 5. Икс:

 # grep "^[rw]" /proc/`pgrep crond`/io rchar: 153463658151 wchar: 91095820045 read_bytes: 44480745472 write_bytes: 2261389312 

(благодаря запланированным обновлениям пакетов и задачам ASLR / prelink в этом случае)

См. Также https://stackoverflow.com/questions/3982957/how-does-cron-internally-schedule-jobs .

  • Как запустить скрипт вне домашнего каталога через cron
  • Значение записи «* * / 1 * * *» cron?
  • Ошибка Crontab: нет crontab Для
  • Команда wget не работает в cronjob
  • Что значит ? означает в выражении cron?
  • Cron, crontab -e читает неверный файл
  • cron из нескольких файлов
  • Задача Cron, случайное начало, но в пределах временного интервала
  • Как запустить скрипт, как только изменится номер недели?
  • Запуск нескольких заданий cron, где одна работа занимает много времени
  • Начало работы Crontab +1 мин после @reboot
  • Linux и Unix - лучшая ОС в мире.