← Назад к вопросам

Как осуществить постоянный запуск скрипта в Linux

1.3 Junior🔥 131 комментариев
#Linux и администрирование#Скриптинг и программирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Обеспечение постоянного запуска скрипта в Linux

Для обеспечения постоянного (персистентного) запуска скрипта в Linux существует несколько надежных подходов, которые различаются по сложности, гибкости и уровню интеграции с системой. Выбор метода зависит от требований к мониторингу, автоматическому перезапуску, логированию и управлению.

1. Systemd (рекомендуемый современный подход)

Systemd — это стандартный инициализационный процесс и менеджер служб в большинстве современных дистрибутивов (RHEL/CentOS 7+, Ubuntu 16.04+, Debian 8+). Он обеспечивает наиболее полный контроль.

Создание unit-файла службы

Создайте файл службы в /etc/systemd/system/ (например, my-script.service):

[Unit]
Description=My Custom Script Service
After=network.target

[Service]
Type=simple
User=myuser
Group=mygroup
WorkingDirectory=/path/to/script/dir
ExecStart=/usr/bin/python3 /path/to/script.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
Environment="KEY=value"

[Install]
WantedBy=multi-user.target

Ключевые параметры:

  • Restart=always — автоматический перезапуск при любом завершении (кроме остановки командой systemctl stop)
  • RestartSec — пауза перед перезапуском
  • User/Group — запуск от конкретного пользователя (важно для безопасности)

Управление службой:

# Перезагрузить systemd для чтения новых файлов
sudo systemctl daemon-reload

# Включить автозагрузку при старте системы
sudo systemctl enable my-script.service

# Запустить службу
sudo systemctl start my-script.service

# Проверить статус
sudo systemctl status my-script.service

# Просмотр логов
sudo journalctl -u my-script.service -f

2. Supervisor (альтернатива для пользовательских служб)

Supervisor — это процесс-монитор, написанный на Python, который не требует прав root для настройки. Идеально подходит для развертываний в пользовательском пространстве.

Установка и настройка:

# Установка
sudo apt-get install supervisor  # Debian/Ubuntu
sudo yum install supervisor       # RHEL/CentOS

Конфигурационный файл в /etc/supervisor/conf.d/my-script.conf:

[program:my-script]
command=/usr/bin/python3 /path/to/script.py
directory=/path/to/script/dir
user=myuser
autostart=true
autorestart=true
startretries=3
stderr_logfile=/var/log/my-script.err.log
stdout_logfile=/var/log/my-script.out.log
environment=KEY="value"

Команды управления:

# Перечитать конфигурацию
sudo supervisorctl reread
sudo supervisorctl update

# Запустить/остановить процесс
sudo supervisorctl start my-script
sudo supervisorctl stop my-script

# Просмотр статуса всех процессов
sudo supervisorctl status

3. Классические подходы (менее рекомендуемые)

CRON с проверкой состояния

Регулярная проверка и перезапуск через cron:

# Добавьте в crontab (crontab -e)
*/5 * * * * /usr/bin/pgrep -f "script.py" || /usr/bin/python3 /path/to/script.py

Недостатки: нет немедленного перезапуска при падении, сложное управление ресурсами.

Screen/Tmux (для временных решений)

Запуск в сессии терминального мультиплексора:

# Создание отключенной сессии screen
screen -dmS myscript python3 /path/to/script.py

# Подключение к сессии
screen -r myscript

Подходит для демонстраций или временных задач, но не для production.

4. Docker (контейнеризация)

Для изолированного запуска можно использовать Docker с политикой перезапуска:

# Dockerfile
FROM python:3.9
WORKDIR /app
COPY script.py .
CMD ["python", "script.py"]
# Запуск контейнера с политикой always restart
docker run -d --restart always --name my-script my-script-image

Критерии выбора метода

  1. Системный уровень/требуются права rootSystemd
  2. Пользовательский уровень/несколько процессовSupervisor
  3. Контейнеризированная средаDocker с restart policy
  4. Быстрый прототипScreen/Tmux (с переходом на systemd позже)

Мониторинг и обслуживание

Независимо от выбранного метода, важно реализовать:

  • Логирование (в файлы, journald или централизованную систему)
  • Мониторинг здоровья (через endpoint, файл здоровья или интеграцию с Prometheus)
  • Алертинг при сбоях (через мониторинговую систему)
  • Ротацию логов (logrotate для файловых логов)

Systemd остается промышленным стандартом для production-i систем благодаря глубокой интеграции с ОС, надежному управлению жизненным циклом и встроенным возможностям мониторинга через journalctl.

Как осуществить постоянный запуск скрипта в Linux | PrepBro