Иногда приходится запускать скрипты, которые должны работать постоянно и самостоятельно восстанавливаться при падениях. Для этого есть systemd — стандартный менеджер служб в современных Linux. Вот как создать свой сервис.

  • Перейди в каталог /etc/systemd/system
cd /etc/systemd/system
  • Создай файл с именем your-service.service и добавь в него следующее:
[Unit]
Description=Описание вашего сервиса

[Service]
User=www-php
WorkingDirectory=/home/www-php
ExecStart=php /home/www-php/mysite.com/script.php
Restart=always

[Install]
WantedBy=multi-user.target

Где можно использовать следующие параметры:

  • [Unit] - основная часть службы
    • Description - описание вашего сервиса
    • After - указываем, после какого сервиса запускать службу (например, nginx.service, mysql.service). Можно указывать построчно несколько значений этого параметра.
    • Requires=nginx.service - для запуска службы обязательно необходим сервис ngnix (указать любой другой)
    • Wants=redis.service - какой сервис должен быть запущен при желании (не обязателен, чисто как доп. инфа)
  • [Service] - блок с настройками сервиса
    • User - от имени какого пользователя выполняется сервис
    • Group - группа, от которой выполнять сервис
    • WorkingDirectory - рабочая директория службы
    • ExecStart - выполняемая команда, например, выполнение php скрипта (полный и точный путь к скрипту)
    • Restart - указываем, что необходимо автоматически делать рестарт службы в случае отвала
    • TimeoutSec=200 - время, сколько ждать перед запуском/остановкой сервиса
    • OOMScoreAdjust=-100 - запрет на отключение сервиса, в случае нехватки памяти
  • [Install] - параметры установки службы
    • WantedBy - уровень запуска, многопользовательский режим

 

  • Перезагрузи файлы службы:
sudo systemctl daemon-reload
  • Запусти свой сервис:
sudo systemctl start your-service.service
  • Проверь статус сервиса:
sudo systemctl status your-service.service
  • Чтобы включить/отключить сервис при каждой перезагрузке, используй команды:
sudo systemctl enable your-service.service
sudo systemctl disable your-service.service

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