Что такое cron и как его используют в DevOps?

«Что такое cron и как его используют в DevOps?» — вопрос из категории Linux, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Cron — это стандартный демон-планировщик задач в Unix-подобных системах. В DevOps он часто используется для автоматизации рутинных операций: бэкапов, ротации логов, запуска периодических скриптов мониторинга или очистки временных файлов.

Синтаксис и настройка: Запись в crontab состоит из пяти полей времени и команды.

# Формат: минута час день_месяца месяц день_недели команда
# Пример: Запускать скрипт бэкапа каждый день в 2:30 ночи
30 2 * * * /opt/scripts/backup.sh

# Пример: Запускать сбор метрик каждые 5 минут
*/5 * * * * /usr/local/bin/push-metrics.sh

# Пример: Очищать кэш каждое воскресенье в 3:00
0 3 * * 0 find /var/cache/app -type f -mtime +7 -delete

Ключевые практики для инженера:

  1. Логирование: Всегда перенаправляйте вывод (stdout/stderr) скриптов в лог-файлы или в систему централизованного логирования (например, Loki, ELK).
    30 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
  2. Переменные окружения: Cron запускает задачи в минимальном окружении. Явно задавайте PATH и другие необходимые переменные в начале crontab или внутри скриптов.
  3. Блокировка от параллельных запусков: Для длительных задач используйте механизмы блокировки (например, flock), чтобы предотвратить запуск новой копии, если предыдущая еще выполняется.
    */10 * * * * /usr/bin/flock -n /tmp/myjob.lock /opt/scripts/long-job.sh
  4. Альтернативы в оркестрации: В современных стеках с Kubernetes периодические задачи (CronJobs) часто выносятся на уровень оркестратора, что обеспечивает лучшую отказоустойчивость, мониторинг и управление.

Основные команды: crontab -e (редактировать), crontab -l (просмотреть), crontab -r (удалить). Системные задания настраиваются в /etc/crontab и файлах /etc/cron.d/.