Cron-скрипты

Тема дорожной карты · Bash

cron — планировщик заданий по времени для Linux, который автоматически запускает Bash-скрипты через заданные интервалы, определённые в файле crontab с пятипольным синтаксисом minute hour day month weekday command, что делает его основой автоматизации по расписанию на серверах. Bash-скрипт, предназначенный для cron, должен использовать абсолютные пути для каждой команды и ссылки на файлы — cron запускается с минимальным окружением, в котором $PATH не включает /usr/local/bin или пользовательские каталоги, — и перенаправлять вывод через >> /var/log/myjob.log 2>&1 для захвата как stdout, так и stderr. Рекомендуемые практики для cron shell-скриптов включают защиту от параллельного запуска с помощью flock или проверки [ -f /var/run/myjob.pid ], а также установку set -euo pipefail в начале для чистого завершения при ошибках с записью в журнал. Директива cron @reboot запускает Bash-скрипт один раз при старте системы, а @daily, @hourly и @weekly — удобные сокращения для распространённых шаблонов планирования на Linux. Написание надёжных cron-скриптов требует понимания урезанного окружения, корректного журналирования и идемпотентной логики автоматизации, дающей одинаковый результат независимо от количества запусков.

Как это работает

Cron-скрипты: распространённые паттерны — ежедневные cron-задания, ротация логов, backup-скрипты, deployment-автоматизация, service health-check, system-level клей между unix-тулами. Комбинируйте с systemd (.service + .timer units) вместо cron, когда нужны логи + restart-on-failure + зависимости. Расписание: cron (просто), systemd timers (современнее + интегрировано), Ansible (multi-host).

Когда применять

Bash — для "связать эти тулы вместе" автоматизации (rsync + tar + ssh + email). Переходите на Ansible/Python/Go, когда скрипт растёт за ~200 строк, требует структурированных данных или multi-host координации. Всегда логируйте в syslog или файл с timestamps — сбои диагностируемы.

Типичные ошибки

Ловушки Cron-скрипты: cron без логирования (job падает 6 месяцев, никто не замечает); скрипты с расчётом, что PATH такой же, как в вашем shell (cron имеет минимальный env — задавайте PATH явно); root-owned скрипты, зовущиеся из www-data через sudo NOPASSWD (privesc-поверхность — минимизируйте sudoable).

Связанные понятия

Полезные ресурсы