Cron против системных таймеров

84

Недавно мне было указано, что существует альтернатива cron, а именно системные таймеры.

Однако я ничего не знаю о системных или системных таймерах. Я использовал только cron.

В Arch Wiki есть небольшая дискуссия . Однако я ищу подробное сравнение между cronсистемными и системными таймерами, уделяя особое внимание плюсам и минусам. Я использую Debian, но я бы хотел общее сравнение для всех систем, для которых доступны эти две альтернативы. Этот набор может включать только дистрибутивы Linux.

Вот что я знаю.

Крон очень стар, начиная с конца 1970-х годов. Первоначальный автор cron - Кен Томпсон, создатель Unix. Cron Vixie, из которых cron в современных дистрибутивах Linux являются прямыми потомками, датируется 1987 годом.

Systemd намного новее и несколько противоречив. Википедия сообщает мне, что ее первый релиз был 30 марта 2010 года.

Итак, мой текущий список преимуществ cron над системными таймерами:

  1. Cron гарантированно присутствует в любой Unix-подобной системе, в том смысле, что он является устанавливаемой поддерживаемой частью программного обеспечения. Это не изменится. Напротив, systemd может остаться или не остаться в дистрибутивах Linux в будущем. В основном это система инициализации, и ее можно заменить другой системой инициализации.

  2. Cron прост в использовании. Определенно проще, чем системные таймеры.

Соответствующий список преимуществ системных таймеров над cron:

  1. Системные таймеры могут быть более гибкими и способными. Но я бы хотел примеры этого.

Итак, подведем итог, вот несколько вещей, которые было бы хорошо увидеть в ответе:

  1. Подробное сравнение таймеров cron и systemd, включая плюсы и минусы использования каждого из них.
  2. Примеры того, что один может сделать, а другой нет.
  3. По крайней мере одно параллельное сравнение cron-скрипта с системным таймером.
Фахим Митха
источник
4
«Cron гарантированно будет в любой Unix-подобной системе. Это не изменится». - Я бы сильно обсудил это. Хотя исторически cron часто включался в базовую настройку установок Unix, на большинстве систем сегодня это просто произвольный дополнительный пакет программного обеспечения среди других. Фактически, существует несколько популярных альтернатив cron (например, anacron, fcron, jobber), которые могут быть предпочтительнее cron. Функциональность cron не так важна для работы системы, как systemd или init, поэтому, если вы беспокоитесь о текущей и будущей переносимости, я бы не стал делать на это ставку.
Гвидо,
6
Это целый список вещей, которые вы хотите в ответе. Я думаю, может быть, вам стоит потратить некоторое время на изучение инструментов самостоятельно и посмотреть, сможете ли вы сформулировать эти ответы самостоятельно, и если у вас есть конкретные вещи, которые вы не понимаете, спросите их здесь.
Жаворонки
5
На самом деле, нет. Я сказал все, что хочу сказать по теме. Вступать в расширенное обсуждение всего, что связано с systemd, хуже, чем бессмысленно - некоторые считают, что незначительные преимущества, которые приносит systemd, стоят корпоративной монополизации экосистемы linux. Другие нет.
саз
7
«Крон очень стар, возвращаясь к концу 1970-х годов». Фактически правильно, но совершенно неактуально, если пакеты в вашей системе поддерживаются разумным и стабильным способом. Солнце также очень старое, но я надеюсь, это не значит, что мы должны заменить его чем-то более блестящим и новым.
Отей
5
@ Отеус, я думаю, ты ошибаешься, говоря, что что-то было давно, не оскорбление. По крайней мере, для многих людей Unix. Это все равно, что сказать, что дому сотни лет - это, безусловно, означает, что у него будут некоторые проблемы, некоторые вещи будут странными из-за модернизации, но у этого также есть определенный шарм, и он, должно быть, был хорошо построен. Это не сказать, его дряхлый. Это простой инструмент, который оказался полезным в течение четырех десятилетий.
Дероберт

Ответы:

43

Вот некоторые моменты об этих двух :

  1. проверка того, что на самом деле делает ваша работа cron, может быть беспорядком, но все события системного таймера тщательно регистрируются в системном журнале, как и другие системные модули, основываясь на событии, которое делает вещи намного проще.

  2. Системные таймеры - это системные сервисы со всеми возможностями управления ресурсами, планирования ввода-вывода ЦП, ...
    Есть список:

    • фильтры системных вызовов
    • идентификаторы пользователей / групп
    • membershipcontrols
    • хорошая ценность
    • Оценка ООМ
    • Класс и приоритет планирования ввода-вывода
    • Политика планирования ЦП ЦП
    • сходство Umask
    • таймеры
    • безопасные биты
    • доступ к сети и ...
  3. с опцией зависимости, как и у других сервисов systemd, могут быть зависимости от времени активации.

  4. Единицы могут быть активированы различными способами, а также их комбинация может быть настроена. Службы могут запускаться и запускаться различными событиями, такими как пользователь, загрузка, изменения состояния оборудования или, например, через 5 минут после подключения некоторого оборудования и ...

  5. намного проще конфигурировать некоторые файлы и прямые теги, чтобы выполнять различные настройки в соответствии с вашими потребностями с помощью системных таймеров.

  6. Легко включить / отключить все это с помощью:

    systemctl enable/disable 
    

    и убить всех детей работы с:

    systemctl start/stop
    
  7. Системные таймеры могут быть запланированы с каландрами и монотонным временем, что может быть очень полезно в случае различных часовых поясов и ...

  8. события системного времени (календарь) более точны, чем cron (кажется, с точностью до 1 с)

  9. События системного времени более значимы, для тех повторяющихся или даже тех, которые должны происходить один раз, вот пример из документа :

    Sat,Thu,Mon-Wed,Sat-Sun → Mon-Thu,Sat,Sun *-*-*00:00:00
      Mon,Sun 12-*-* 2,1:23 → Mon,Sun 2012-*-* 01,02:23:00
                    Wed *-1 → Wed *-*-01 00:00:00
            Wed-Wed,Wed *-1 → Wed *-*-01 00:00:00
                 Wed, 17:48 → Wed *-*-* 17:48:00 
    
  10. С точки зрения использования процессора системный таймер пробуждает процессор по истечении времени, но cron делает это чаще.

  11. События таймера могут быть запланированы на основе времени окончания выполнения, некоторые задержки могут быть установлены между выполнениями.

  12. Связь с другими программами также заметна, иногда это необходимо для некоторых других программ, чтобы знать таймеры и состояние своих задач.

F.sb
источник
2
Это хорошее усилие, спасибо. Однако было бы полезно более прямое сравнение с cron, включая пример. Кроме того, кое-что из того, что вы пишете, не совсем понятно, например, «с точки зрения использования ЦП системный таймер пробуждает ЦП по истечении времени, но cron делает это чаще».
Фахим Митха
Здравствуйте, @ F.sb! Ваш ответ подразумевает, что вы можете планировать работу, используя разные часовые пояса. Это верно? Как бы Вы это сделали? Это было бы значительным преимуществом по сравнению со стандартными реализациями cron, но я не смог найти никакой информации об этом, за исключением того, man systemd.timeчто, кажется, противоречит этому: нелокальные часовые пояса, кроме UTC, не поддерживаются.
Тэд Лиспи
Зависимости удобны. Например, если резервное копирование хоста выполняется как системный таймер, вы можете использовать зависимости, чтобы гарантировать, что экспорт базы данных завершится непосредственно перед резервным копированием.
vk5tu
6
Пожалуйста, будьте честнее. Вы начинаете с того, что говорите о некоторых моментах, а затем продолжаете перечислять преимущества вашего предпочтительного выбора . Это не плохо, что у вас есть предпочтения, но тогда вы должны заявить об этом заранее. Кроме того, тот факт, что это все в пользу одной системы и не учитывает плюсы этой системы, заставляет меня чувствовать, что этот ответ искажен.
Джаспер
2
@jasper Уважаемые, я использую оба из них, основываясь на своих потребностях, и я всегда выбираю тот, который основан на ваших потребностях, я только что упомянул некоторые факты, основанные на документах и ​​руководствах.
F.sb
16

Прямо изо рта лошади, так сказать: https://wiki.archlinux.org/index.php/Systemd/Timers#As_a_cron_replacement

Выдержка из страницы выше:

Выгоды

Основные преимущества использования таймеров заключаются в том, что каждая работа имеет собственный системный сервис. Вот некоторые из этих преимуществ:

  • Задания могут быть легко запущены независимо от их таймеров. Это упрощает отладку.
  • Каждое задание можно настроить для работы в определенной среде (см. Systemd.exec (5)).
  • Задания могут быть прикреплены к cgroups.
  • Задания могут быть настроены в зависимости от других системных модулей.
  • Задания регистрируются в журнале systemd для легкой отладки.

Предостережения

Некоторые вещи, которые легко сделать с помощью cron, трудно сделать только с единицами таймера.

  • Сложность: чтобы настроить синхронизированное задание с systemd, вы создаете два файла и запускаете пару команд systemctl. Сравните это с добавлением одной строки в crontab.
  • Электронная почта: нет встроенного эквивалента MAILTO cron для отправки электронных писем при сбое работы. В следующем разделе приведен пример настройки эквивалента с помощью OnFailure =.
shdwlynx
источник
6
Э-э ... не уверен, что я чувствую по поводу ответа, который почти полностью копируется и вставляется, тем более что лицензии не совместимы. Но, как минимум, вы должны исправить этот бит «см. Следующий раздел». С этой ошибкой кажется, что ты не прочитал то, что скопировал и вставил.
Дероберт
5
Когда вы цитируете материал откуда-то, вы должны указать источник и четко указать, что цитируется . Плагиат это не круто .
Жиль