Краткий ответ: Редактируйте расписание через crontab -e. Каждая строка — пять временных полей плюс команда, например 0 3 * * * /usr/local/bin/backup.sh запускается ежедневно в 03:00. Всегда используйте абсолютные пути, а когда задача не срабатывает — смотрите journalctl или syslog.
Обзор
Cron — стандартный планировщик Linux для повторяющихся задач: бэкапы, продление сертификатов, воркеры очередей, чистки. У каждого пользователя свой crontab; системные задачи живут в /etc/cron.d/ и /etc/cron.{daily,hourly}.
Что нужно иметь
- SSH-доступ от пользователя, который должен выполнять задачу.
- Задачу, предварительно проверенную вручную из оболочки.
Пошаговая инструкция
- Откройте свой crontab:
crontab -e - Добавьте строку расписания — поля: минута, час, день месяца, месяц, день недели:
# 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 - Сохраните и проверьте:
crontab -l. - Во время тестирования захватывайте вывод, дописав:
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1 - Предотвращайте наложение долгих задач через
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 →
