Я ощущаю себя пещерным человеком.

Мне уже много лет, и есть вещи, к которым я привык настолько, что воспринимаю их как константу. Они всегда на своих местах. Они всегда работают. Я никогда не задумываюсь, есть ли что-то еще — потому что зачем, если и так все хорошо?

Когда мне нужно запускать что-то регулярно, с заданной периодичностью — я использую cron. Я не знаю, сколько лет этой утилите. Мне кажется, она была всегда. Открыл crontab -e, написал расписание и забыл. А оно работает.

Но сегодня, решая очередную задачу с периодическим запуском, я с удивлением узнал, что альтернатива существует. Причем довольно давно.

Systemd timer — это механизм планирования задач, встроенный в systemd. Он решает те же задачи, что и cron, но с бо́льшей точностью и бо́льшим количеством опций:

  • Гранулярность до секунд. У cron минимальный интервал — одна минута. У systemd timer такого ограничения нет.

  • Защита от дублирования. Если предыдущий запуск еще не завершился — новый не запустится. Cron этого не контролирует: если скрипт работает дольше интервала, запустится второй экземпляр поверх первого.

  • Логирование через journalctl. Все запуски, выводы, ошибки — в одном месте. Не нужно вручную перенаправлять stdout в файл.

  • RandomizedDelaySec. Случайное смещение времени запуска. Задача стартует не ровно по расписанию, а в случайный момент внутри заданного окна. Это усложняет выявление паттерна по времени — полезно, когда предсказуемость запуска нежелательна.

  • Зависимости. Можно указать, что задача должна запускаться только после поднятия сети, после запуска другого сервиса, после монтирования диска. Cron просто стреляет по расписанию, не глядя на состояние системы (или надо лопатить свои костыли).

  • Persistent. Если система была выключена в момент запланированного пуска — задача выполнится сразу после загрузки. Cron же пропущенные запуски просто теряет.

Совсем недавно мне нужно было настроить автоматическую ротацию случайно генерируемых gRPC-путей между нодами. Для этого можно было бы использовать cron. Но… Наверное, пора выходить из пещеры.

Комментарии (16)


  1. legendasofizma
    20.04.2026 18:42

    А ещё оказывается systemd умеет с /dev/watchdog работать из коробки, делая ненужными всякие apt install watchdog и прочее такое.


  1. Xelld
    20.04.2026 18:42

    А следующими открытиями будут resolved, networkd и mounts? :)


    1. v0rdych
      20.04.2026 18:42

      Mounts изрядно странный в systemd. Зачем было жестко увязывать имя юнита с путем монтирования - лютая загадка.


      1. Xelld
        20.04.2026 18:42

        Полагаю, что для наглядности и какой-то костыльной защиты от управления одним устройством несколькими разными mounts.

        Но контролировать условия и зависимости в systemd все же намного удобнее, чем в fstab.


  1. ss-pol
    20.04.2026 18:42

    зато cron есть везде, а systemd - нет


    1. rSedoy
      20.04.2026 18:42

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


      1. ss-pol
        20.04.2026 18:42

        1. rSedoy
          20.04.2026 18:42

          а реальный процент и не притянутых сюда Android и других чем-то подобных (не удивлюсь, что в этом списке окажутся даже и без cron), а условно "серверных"?


          1. ss-pol
            20.04.2026 18:42

            Почему только серверных, на десктопе крон не нужен что-ли?

            Я мало чем пользовался, но вот один из первых в списке Alpine Linux - часто используется в контейнерах на серверах потому что он компактный и требует мало памяти. Потом Devuan - тоже вполне для сервера подходит. OpenWrt - чисто серверный, для роутеров. Это из тех, с которыми знаком не понаслышке.

            А так там довольно много дистрибутивов, которые "на слуху": CalyxOS Calculate Linux GNU Guix


            1. rSedoy
              20.04.2026 18:42

              так какой их процент? В контейнерах обычно не cron используют, а что-то внешнее. Ладно, "серверных" неудачное определение, а то чтобы сюда и OpenWrt сразу притянули, пусть будет конкретная и самая большая часть - VPS, много там Devuan и прочих без systemd?


              1. ss-pol
                20.04.2026 18:42

                Да какая разница, много, мало... Есть стандарт, который работает везде и всегда, это крон. А системд - как повезёт.


                1. rSedoy
                  20.04.2026 18:42

                  как повезёт.

                  Нет, не как повезет, с большой вероятность будет systemd. А как повезет, уже как про шанс 50 на 50 - либо повезет, либо нет ;)


  1. glebliutsko
    20.04.2026 18:42

    У systemd только одна проблема.

    В cron расписание настраивается одной строчкой, которую я на изусть напишу. В systemd нужно создать 2 файла по 5-10 строк, которые я наизусть не напишу. Постоянно либо в гугл иду или в ChatGPT

    Из плюсов еще есть возможность настроить изоляцию скрипту. Получится недо-контейнер, но зато без docker


    1. Xelld
      20.04.2026 18:42

      Сам systemd прекрасен (и ужасен) своей гибкостью и богатым функционалом. За это приходится платить :)


    1. Xelld
      20.04.2026 18:42

      Ну и почему же "недо-контейнер"? Тот же podman предлагает именно такой вариант управления.

      И возможность управления из юнита cgroup, namespace и прочими крутилками порой очень выручает.


    1. 13werwolf13
      20.04.2026 18:42

      ну вот не надо, если у вас задачи в планировщике сложнее чем `bash /opt/script.sh` и включают в себя набор переменных, зависимость от работающего парралельно софта, а так же требуют ограничения по возможностям родить такое для cron будет написанием куда более чудовишьного скрипта чем лаконичный ini файл для systemd timers.