Краткий ответ: Редактируйте расписание через crontab -e. Каждая строка — пять временных полей плюс команда, например 0 3 * * * /usr/local/bin/backup.sh запускается ежедневно в 03:00. Всегда используйте абсолютные пути, а когда задача не срабатывает — смотрите journalctl или syslog.

Обзор

Cron — стандартный планировщик Linux для повторяющихся задач: бэкапы, продление сертификатов, воркеры очередей, чистки. У каждого пользователя свой crontab; системные задачи живут в /etc/cron.d/ и /etc/cron.{daily,hourly}.

Что нужно иметь

  • SSH-доступ от пользователя, который должен выполнять задачу.
  • Задачу, предварительно проверенную вручную из оболочки.

Пошаговая инструкция

  1. Откройте свой crontab:
    crontab -e
  2. Добавьте строку расписания — поля: минута, час, день месяца, месяц, день недели:
    # m  h  dom mon dow  command
    0 3 * * *        /usr/local/bin/backup.sh
    */5 * * * *      /home/user/.venv/bin/python /home/user/check.py
    0 0 * * 0        certbot renew --quiet
  3. Сохраните и проверьте: crontab -l.
  4. Во время тестирования захватывайте вывод, дописав:
    0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
  5. Предотвращайте наложение долгих задач через flock:
    */10 * * * * flock -n /tmp/job.lock /usr/local/bin/job.sh

Типичные проблемы

  • Скрипт работает в оболочке, но не в cron: PATH у cron минимальный — используйте абсолютные пути для каждого бинарника или задайте PATH= в начале crontab.
  • Кажется, ничего не запускается: проверьте grep CRON /var/log/syslog (Debian-семейство) или journalctl -u crond (RHEL-семейство).
  • Не то время: cron использует часовой пояс сервера — см. как его задать.
  • % в командах: знак процента в crontab особый — экранируйте как \%.

Когда обращаться в поддержку

Настройка cron на неуправляемом сервере — ваша; если запланированные задачи останавливаются из-за сбоя самого сервера, откройте тикет.

Частые вопросы

Почему скрипт работает в оболочке, но не в cron?

Cron запускается с минимальным окружением и PATH. Используйте абсолютные пути для каждой команды и файла в задаче или явно задайте PATH в начале своего crontab.

Как увидеть, действительно ли запускалась моя cron-задача?

Проверьте «grep CRON /var/log/syslog» в Debian-семействе или «journalctl -u crond» в RHEL-семействе и допишите к команде перенаправление вывода в лог-файл, чтобы видеть её собственный вывод.

Как избежать наложения запусков долгой задачи?

Оберните команду во flock, например «flock -n /tmp/job.lock /path/to/job.sh» — следующий запланированный запуск сразу завершится, если предыдущий ещё идёт.

Похожие статьи

Нужна помощь? Связаться с поддержкой Cloud2Y →

Помог ли вам данный ответ? 0 Пользователи нашли это полезным (0 голосов)