Назад | Перейти на главную страницу

Как упорядочить правильное завершение работы и запуск веб-служб с помощью systemd?

Я пытаюсь структурировать завершение работы и запуск служб Apache, PHP-FPM и MariaDB с помощью systemd:

Это дополнительные файлы конфигурации в /etc/systemd/system папка:

# httpd.service
.include /usr/lib/systemd/system/httpd.service
[Unit]
After=mariadb.service php-fpm.service
Before=php-fpm.service

# php-fpm.service
.include /usr/lib/systemd/system/php-fpm.service
[Unit]
Before=mariadb.service

Я намерен запустить Apache только после запуска PHP-FPM и MariaDB и остановить Apache перед остановкой PHP-FPM, остановить PHP-FPM до MariaDB.

Однако я получаю ошибки как при запуске, так и при завершении работы:

12:42:09 systemd[1]: Found ordering cycle on php-fpm.service/stop
12:42:09 systemd[1]: Found dependency on mariadb.service/stop
12:42:09 systemd[1]: Found dependency on php-fpm.service/stop
12:42:09 systemd[1]: Job httpd.service/stop deleted to break ordering cycle starting with php-fpm.service/stop
12:42:09 systemd[1]: Stopping MariaDB database server...
12:42:12 systemd[1]: Stopped MariaDB database server.
12:42:12 systemd[1]: Stopping The PHP FastCGI Process Manager...
12:42:12 systemd[1]: Failed to remove content of temporary directory /tmp/systemd-mariadb.service-Xp7JJZ5: No such file or directory
12:42:12 systemd[1]: Stopped The PHP FastCGI Process Manager.
12:42:12 systemd[1]: Failed to remove content of temporary directory /tmp/systemd-php-fpm.service-XPLabUE: No such file or directory
-- Reboot --
12:46:20 systemd[1]: Found ordering cycle on php-fpm.service/start
12:46:20 systemd[1]: Found dependency on mariadb.service/start
12:46:20 systemd[1]: Found dependency on php-fpm.service/start
12:46:20 systemd[1]: Job httpd.service/start deleted to break ordering cycle starting with php-fpm.service/start

Похоже, что цикл заказа, который я указал, вызывает проблемы. Как это решить?

Насколько я понимаю, у вас циклическая зависимость. Вы говорите systemd запустить PHP-fpm до Apache и одновременно после Apache. Это не может работать так, как вы хотите.

В твоем httpd.service в файле укажите следующее:

Requires=mariadb.service php-fpm.service
After=mariadb.service php-fpm.service

Объяснение опций для файлов модулей systemd. Он также говорит, что порядок выключения будет обратным порядком запуска, поэтому вам не нужно настраивать его отдельно. Часть «Требуется» гарантирует, что Apache запускается только в случае успешного запуска MariaDB и PHP-fpm.