Запуск программы как сервиса или напрямую, в чем разница

Запуск программы как сервиса или напрямую, в чем разница

Это может показаться немного запутанным вопросом...

Недавно я начал экспериментировать с Docker и пытаюсь настроить базовый сервер Lamp.

У меня есть docker-образ centos с httpd, php и mysql.

Однако в контейнере Docker я не могу запускать службы так, как я обычно это делаю через systemd / service.

Я могу запустить httpd напрямую через/usr/sbin/httpd

Так в чем же тогда разница между запуском httpd через , /usr/sbin/httpdа не через systemctl start httpd?

Есть ли «правильный» способ остановить или перезапустить httpd? - Я думал, что могу просто завершить процесс, но, похоже, он запускает около 10 процессов Apache.

Я понимаю, что это не совсем конкретный вопрос, но любые ссылки на соответствующие материалы будут приняты с благодарностью.

решение1

Вы не можете использовать systemctl, если ваш PID 1 не является systemd. Вы можете узнать свой PID 1 с помощью ps -q 1.

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

решение2

Служба systemd запустит процесс аналогично запуску напрямую, однако она будет отслеживать все ответвленные процессы и потоки. Это означает, что когда вы systemctl stop apacheзавершите все дочерние процессы. Также использование процессов systemd удобно, потому что они будут работать в фоновом режиме и могут быть запущены при запуске системы.

решение3

Учитывая ваш уровень обучения, я бы не советовал использовать Docker для решения вашей задачи.

Если вы используете Docker для изоляции процесса, вы можете использовать для этого уникальных пользователей Unix, или systemd также включает директивы для ограничения того, к чему может получить доступ служба systemd. См., например, Capabilities=в man systemd.exec.

Кроме того, для изоляции процессов с помощью Docker вам необходимо запустить каждую базу данных и веб-сервер в разных контейнерах Docker.

Другая важная функция, которая systemdобеспечивает управление процессами. То есть, если ваш httpdпроцесс падает, systemd перезапустит его для вас.

Я рекомендую сначала запустить все процессы непосредственно на хост-сервере с помощью systemd. Многие современные пакеты systemdуже поставляются с файлами конфигурации.

Как только вы хорошо поймете systemdи поймете, какие преимущества даст добавление Docker, рассмотрите возможность его использования в вашем случае.

На моей работе мы пробовали использовать Docker для управления набором сервисов, но позже привыкли управлять им напрямую, systemdи в результате получилась более чистая система, которая нравится команде, с меньшим количеством bashскриптов для объединения и обслуживания всех элементов.

Связанный контент