Автоматическое обновление сайта с помощью crontab и git pull

16 июля 2025 г.

Если для запуска обновления на вашем проекте достаточно команды , то вы можете настроить автоматическое обновление сайта с помощью crontab. Это позволит вашему сайту всегда быть актуальным без необходимости подтягивать изменения вручную.

Я пользовался этим способом автообновления сайта и телеграм-ботов, пока не перешел на сборку docker-образов и обновление через watchtower, но в этом расскажу в следующем посте.

Настройка crontab

Для настройки crontab откройте терминал и введите команду:

crontab -e

Это откроет редактор crontab, где вы сможете добавить новую задачу.

После внесения правок в файл crontab, сохраните его и выйдите из редактора: , а затем и — если вы используете nano, или — если vim.

Пример задачи

Разберем пример моей задачи, которая выполняет git pull в папке с проектом и перезапускает docker-контейнеры, если были изменения:

* * * * * cd /root/guryn.ru && git pull | grep -q -v "Already up to date." && docker compose restart >> /root/guryn.ru/pull-and-restart.log 2>&1

Теперь подробнее о том, что тут происходит:

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

— скрипт переходит в папку с вашим проектом.

— подтягиваем последние изменения из репозитория.

— проверяет, что прошлая команда вывела в ответ. Ключ -v инвертирует результат поиска, и если изменений нет и ответ равен указанному, то эта команда вернет 0, что завершит работу задачи.

Если же изменения есть, то команда вернет 1, и следующая часть задачи выполнится.

— перезапускаем контейнеры приложения после подтягивания изменений.

— и запишем вывод результата в лог-файл. Файл будет создан, если его нет, и будет перезаписываться каждый раз при выполнении задачи.

Вторая часть перенаправляет стандартный поток ошибок в стандартный поток вывода, чтобы все сообщения об ошибках также попадали в лог.

Результат и возможные ограничения

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

Однако стоит помнить, что миграции базы данных, сборка статических файлов или другие сложные операции требуют более внимательного подхода. В таких случаях лучше использовать CI/CD инструменты, которые позволят вам более гибко управлять процессом развертывания и обновления вашего приложения.

Вы также не получите уведомлений о том, что обновление прошло успешно или нет. Поэтому стоит периодически проверять лог-файл, чтобы убедиться, что все работает корректно. Или добавить отправку уведомлений в эту команду.

Подпишитесь на мой Бусти, чтобы комментировать записи и получать уведомления о новых заметках.Подписаться на Бусти
Показать заметки по похожей теме