Что могло бы быть альтернативой “cron”?

Вопрос или проблема

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

Теперь в минимизированной серверной версии UBUNTU 24.04.1 LTS он не включен по умолчанию. Я мог бы установить его, проигнорировав предупреждение о безопасности, может быть, но хотел бы узнать, какие есть альтернативы? Допустим, как я могу запустить bash-скрипт в точно заданные часы каждый день?

Вы можете использовать таймеры systemd. Я не знаю много о безопасности серверов, но таймеры systemd решают в основном ту же проблему, что и cron, хотя работают совершенно по-другому.

Смотрите Arch Wiki для получения дополнительной информации.

Также есть несколько реализаций cron, таких как anacron или cronie. Возможно, одна из них более безопасна, чем другая?

Решением будет использование таймеров SystemD и комбинаций сервисов.

Следующее – пример сервиса SystemD и таймера SystemD:

custom-process.timer (размещен в /etc/systemd/system):

[Unit]
Description=Таймер моего пользовательского процесса
Requires=custom-process.service

[Timer]
Unit=custom-process.service
OnCalendar=*-*-* 01:00:00

[Install]
WantedBy=timers.target

custom-process.service (размещен в /etc/systemd/system):

[Unit]
Description=Мой пользовательский процесс
Wants=custom-process.timer
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/bin/python3 custom-script.py
WorkingDirectory=/home/user/custom_script/
User=user
Group=user
NoNewPrivileges=true
UMask=0177
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Файл определения сервиса пользовательского процесса сообщает SystemD, как запускать скрипт и под каким пользователем с какими привилегиями и в какой рабочей директории выполнять cd во время выполнения. Определение таймера определяет, на каком календарном времени/основе (как это делает скрипт cron!) выполнять сервис. В приведенном выше примере это выполняет мой пользовательский скрипт один раз в день в 1:00 ночи. Пользовательский процесс – это пользовательский python-скрипт, который находится в /home/user/custom_script (что является рабочей директории, настроенной для понимания ‘относительного’ пути к custom-script.py, но также для того, чтобы все другие локальные python-файлы, на которые ссылается мой скрипт, работали)

После того как вы определили правильный объект сервиса и таймера, вам нужно перезагрузить определения SystemD с помощью sudo systemctl daemon-reload.

Чтобы протестировать сервис и убедиться, что определение работает, выполните sudo systemctl start custom-process.service

Чтобы протестировать таймер, используйте sudo systemctl --now enable custom-process.timer. Это запустит автоматический таймер при загрузке и выполнит таймер в следующее определенное время запуска в соответствии с определением.


Подробности о файле сервиса и его различных параметрах можно найти в документации SystemD на юнитах файлов сервиса.

Подробности о файле таймера и его параметрах можно найти в документации SystemD на юнитах файлов таймера.

Ответ или решение

Альтернативы для Cron: Использование Systemd таймеров на сервере Ubuntu 24.04.1 LTS

Вопрос о безопасности использования Cron для планирования повторяющихся задач обостряется с учетом особенностей современных операционных систем, таких как Ubuntu 24.04.1 LTS. В связи с изменениями в архитектуре систем и требованиями безопасности, многие IT-специалисты ищут более современные решения, которые могут обеспечить аналогичную функциональность, не рискуя безопасностью.

Почему Systemd таймеры?

Systemd – это система инициализации и управления службами, которая в последние годы стала стандартом для большинства дистрибутивов Linux, включая Ubuntu. Таймеры Systemd предлагают несколько преимуществ по сравнению с традиционным Cron:

  1. Безопасность: Таймеры могут быть настроены с учетом современных требований безопасности. Вы можете указать пользователя и группу, от имени которых будет выполняться задача, а также задать привилегии, что значительно снижает риски выполнения задач с высокими правами доступа.

  2. Гибкость: Systemd позволят создавать более сложные сценарии, такие как зависимость от других служб, обработку событий и настройки запусков, привязанных к состояниям системы.

  3. Подробное логирование: Каждое выполнение задачи фиксируется в журнале Systemd, что облегчает отладку и анализ.

Настройка Systemd таймеров

Для настройки задач с использованием Systemd вам необходимо создать два файла: один для службы и один для таймера. Рассмотрим пример, как это можно сделать для запуска bash-скрипта в одно и то же время каждый день.

1. Создание файла службы

Создайте файл службы, например, custom-process.service, в каталоге /etc/systemd/system/:

sudo nano /etc/systemd/system/custom-process.service

Вставьте следующий код:

[Unit]
Description=My Custom Process
After=network-online.target

[Service]
Type=oneshot
ExecStart=/bin/bash /путь/к/вашему/script.sh
User=ваш_пользователь
Group=ваша_группа
NoNewPrivileges=true
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

2. Создание файла таймера

Теперь создайте файл таймера custom-process.timer в том же каталоге:

sudo nano /etc/systemd/system/custom-process.timer

Добавьте следующий контент:

[Unit]
Description=My Custom Process Timer

[Timer]
Unit=custom-process.service
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

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

3. Активация таймера

После создания файлов необходимо выполнить несколько команд, чтобы активировать таймер:

sudo systemctl daemon-reload
sudo systemctl start custom-process.service
sudo systemctl enable custom-process.timer

Для проверки статуса таймера можно использовать:

sudo systemctl list-timers

Заключение

Использование Systemd таймеров на сервере Ubuntu 24.04.1 LTS представляет собой современное решение для планирования задач. Это не только повышает безопасность, но и внедряет гибкие возможности управления и учета выполнения задач. При переходе от Cron к Systemd необходимо учитывать такие аспекты, как правильное указание права доступа, логирование и организация зависимостей. Всё это способствует созданию устойчивой и защищённой среды выполнения ресурсов сервера.

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

Оцените материал
Добавить комментарий

Капча загружается...