Настройка автозапуска Python-скриптов на сервере: cron, systemd, nohup

Настройка автозапуска Python-скриптов на сервере: cron, systemd, nohup

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

Введение

У вас есть набор команд на языке Python с расширением .py — Python-скрипт. Он даёт возможность:

  • копировать базу данных для сохранности;
  •  собирать информацию с сайтов;
  • автоматически отвечать на сообщения в Telegram или Discord;
  •  отслеживать цены, курсы, запасы, показатели;
  •  передавать данные в другие сервисы;
  •  запускать проверки и отправлять отчёты.

Но чтобы всё это происходило, нужен автозапуск. Если выполнять это вручную, то как только вы закроете окно терминала (или просто выйдете с сервера), процессы остановятся.

Автоматическая активация нужна для работы по расписанию. Например, каждый день в 3 часа ночи создавалась резервная копия. Ещё один вариант — непрерывная работа: это нужно для Telegram-бота или системы мониторинга, которые должны быть активны круглосуточно.

Для этого в Linux-системах (а именно они используются в большинстве случаев) существует три основных способа:

  • cron — работа по расписанию, например, каждый день или каждый час;
  • systemd — функционирование в фоновом режиме с автоматическим восстановлением после ошибок или перезагрузки;
  • nohup сохраняет активность процесса при отключении.

Аренда VPS/VDS от 219 руб/месяц

Преимущества VPS в AdminVPS:

✓ Бесплатное администрирование

✓ Только быстрые NVMe-диски

✓ Защита от DDoS-атак

✓ Быстрая техподдержка

Аренда VPS/VDS виртуального сервера от AdminVPS — это прозрачная и честная услуга с доступной ценой

Что выбрать: cron, systemd или nohup

СпособДля чего подходитРаботает при выходе из SSHПерезапуск при сбоеРабота по расписанию
cronРегулярные задачи (бекап, отчёты)НетНетДа
systemdКруглосуточные службы (боты, мониторинг)ДаДаНет
nohupРазовые или срочные задачиДаНетНет
Таблица. Сравнение способов автозапуска Python-скриптов на сервере

cron — активация по расписанию

Для настройки скрипта потребуется доступ к серверу по SSH — подключиться можно через PuTTY, Terminal или встроенный терминал на Mac/Linux. Если Python уже установлен и скрипт успешно запускается вручную, остаётся только определить абсолютные пути к интерпретатору и самому ру-файлу. Подключитесь к серверу через SSH. Откройте клиент и введите данные для входа: IP-адрес, логин и пароль или ключ доступа. Убедитесь, что Python установлен. Введите команду:

python3 --version

Если отобразится версия, например Python 3.8.10, всё готово к работе. Если команда не сработает, потребуется установить Python или обратиться к хостеру.

Проверяем, что скрипт работает. Введите команду (замените путь на ваш):

python3 /полный/путь/к/вашему_скрипту.py

Открываем редактор расписания cron:

crontab -e

При первом запуске появится вопрос, какой редактор использовать. Выберите nano (простой вариант).

Добавляем строку для запуска, например, каждый день в 3 часа ночи:

0 3 * * * /usr/bin/python3 /полный/путь/к/вашему_скрипту.py >> /полный/путь/к/лог_файлу.log 2>&1

Пояснения:

  • 0 3 * * * — это расписание (минуты и часы, дни и т.д.); здесь — в 03:00 каждый день;
  • /usr/bin/python3— путь к интерпретатору Python; его можно узнать командой which python3;
  • /полный/путь/к/вашему_скрипту.py — путь к вашему файлу;
  • >> /полный/путь/к/лог_файлу.log 2>&1 — перенаправление вывода и ошибок в файл журнала (лог), чтобы можно было посмотреть, что происходило.

Сохраняем и выходим. Для nano: нажмите Ctrl+O (сохранить) → Enter (подтвердить имя файла) → Ctrl+X (для выхода).

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

Для теста проще задать запуск каждые 2 минуты (временно), например:

*/2 * * * * /usr/bin/python3 /полный/путь/к/вашему_скрипту.py >> /полный/путь/к/лог_файлу.log 2>&1

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

systemd — непрерывный процесс

Это «менеджер» систем в Linux. Он позволяет превратить Python-скрипт в постоянную фоновую службу, которая автоматически стартует при включении, продолжает работу без привязки к сессии и восстанавливается после сбоев. Подходит для задач, требующих непрерывного исполнения — например, Telegram-ботов или систем мониторинга.

Настройка systemd 

Создаём файл службы. Подключитесь к серверу и введите команду для нового файла:

sudo nano /etc/systemd/system/myscript.service

В открывшемся редакторе вставьте такой текст (замените пути и имя пользователя):

[Unit]

Description=Python Script Service
After=network.target

[Service]

ExecStart=/usr/bin/python3 /полный/путь/к/вашему_скрипту.py
WorkingDirectory=/полный/путь/к/директории_со_скриптом
Restart=always
User=ваш_пользователь
StandardOutput=append:/полный/путь/к/output.log
StandardError=append:/полный/путь/к/error.log

[Install]

WantedBy=multi-user.target

Здесь:

  • ExecStart — для активации задачи;
  • WorkingDirectory — папка, где лежит скрипт;
  • Restart=alwayssystemd автоматически перезапустит процесс при сбоях;
  • User — пользователь (обычно ваш логин);
  • StandardOutput=append:/полный/путь/к/log.txt и
    StandardError=append:/полный/путь/к/error.log — логи (вывод и ошибки) сохраняются в файлы, чтобы можно было посмотреть, что происходит.

Сохраняем и выходим: Ctrl+O, Enter, Ctrl+X.

Обновляем конфигурацию systemd:

sudo systemctl daemon-reload

Включаем автозапуск:

sudo systemctl enable myscript.service

Запускаем службу сейчас:

sudo systemctl start myscript.service

Проверяем статус:

systemctl status myscript.service

Если служба работает, увидите информацию о её состоянии, времени запуска и отсутствии ошибок.

Остановить службу:

sudo systemctl stop myscript.service

Перезапустить:

sudo systemctl restart myscript.service

Запуск без остановки с помощью nohup

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

Подключитесь к серверу и введите:

nohup python3 /полный/путь/к/вашему_скрипту.py > /полный/путь/к/output.log 2>&1 &

Что это означает:

  • nohup — игнорирует команду остановки, которая обычно посылается при выходе из терминала;
  • > output.log — сохраняет вывод программы в файл output.log;
  • 2>&1 — ошибки тоже сохраняются в этот же файл;
  • & — запускает программу в фоне, чтобы вы сразу получили обратно управление терминалом.

Чтобы проверить работу, наберите:

ps aux | grep ваш_скрипт.py

Если в списке процессов появится ваш скрипт — значит, он работает.

Чтобы завершить процесс:

pkill -f ваш_скрипт.py

Выбор метода в зависимости от задачи

Для регулярного выполнения скрипта по расписанию (например, раз в день или раз в час) подойдёт cron.

При необходимости непрерывной работы используют systemd.

Быстрый запуск с гарантией продолжения процесса после выхода из SSH-сессии обеспечивает nohup.

Рекомендации

Перед настройкой автозапуска проверяйте вручную, что скрипт выполняется корректно. Указывайте полный путь к скрипту и Python в командах и установках. Если что-то не работает, смотрите файлы логов — они подскажут причину ошибки. Для cron и systemd указывайте пользователя, который имеет права на запуск скрипта и доступ к нужным файлам.

Читайте в блоге:

Loading spinner
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

VPN на VPS-сервере

Узнайте, как создать собственный VPN на VPS-сервере для защиты ваших конфиденциальных данных!

Что будем искать? Например,VPS-сервер

Мы в социальных сетях