Перед вами подробная инструкция настройки автозапуска для тех, кто раньше этим не занимался.
Введение
У вас есть набор команд на языке Python с расширением .py — Python-скрипт. Он даёт возможность:
- копировать базу данных для сохранности;
- собирать информацию с сайтов;
- автоматически отвечать на сообщения в Telegram или Discord;
- отслеживать цены, курсы, запасы, показатели;
- передавать данные в другие сервисы;
- запускать проверки и отправлять отчёты.
Но чтобы всё это происходило, нужен автозапуск. Если выполнять это вручную, то как только вы закроете окно терминала (или просто выйдете с сервера), процессы остановятся.
Автоматическая активация нужна для работы по расписанию. Например, каждый день в 3 часа ночи создавалась резервная копия. Ещё один вариант — непрерывная работа: это нужно для Telegram-бота или системы мониторинга, которые должны быть активны круглосуточно.
Для этого в Linux-системах (а именно они используются в большинстве случаев) существует три основных способа:
- cron — работа по расписанию, например, каждый день или каждый час;
- systemd — функционирование в фоновом режиме с автоматическим восстановлением после ошибок или перезагрузки;
- nohup сохраняет активность процесса при отключении.
Что выбрать: cron, systemd или nohup
Способ | Для чего подходит | Работает при выходе из SSH | Перезапуск при сбое | Работа по расписанию |
---|---|---|---|---|
cron | Регулярные задачи (бекап, отчёты) | Нет | Нет | Да |
systemd | Круглосуточные службы (боты, мониторинг) | Да | Да | Нет |
nohup | Разовые или срочные задачи | Да | Нет | Нет |
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=always — systemd автоматически перезапустит процесс при сбоях;
- 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 указывайте пользователя, который имеет права на запуск скрипта и доступ к нужным файлам.
Читайте в блоге:
- Как установить Python на VPS: 3 способа
- Микрофреймворк Flask Python: особенности и документация
- Как создать бота Discord на Python