Как остановить службу systemd

Я пытаюсь создать служебный файл systemd для Flume, создал /etc/systemd/system/flume-ng.service со следующим содержимым

[Unit]
Description=Apache Flume

[Service]
Environment=FLUME_CLASSPATH=/opt/flume/current/lib/
ExecStart=/usr/bin/nohup /usr/bin/flume-ng agent -c /etc/flume-ng/conf -f /etc/flume-ng/conf/flume.conf --name a1 &

[Install]
WantedBy=multi-user.target

которые запускают службу Flume, но как остановить ее как службу?

В этом случае мне пришлось убить с помощью PID.

Благодарность


person roy    schedule 03.11.2016    source источник


Ответы (3)


Вам нужно указать параметр ExecStop в разделе [Service] с командой, которую вы хотите использовать для остановки службы.

Что-то типа:

[Service]
Environment=FLUME_CLASSPATH=/opt/flume/current/lib/
ExecStart=/usr/bin/nohup /usr/bin/flume-ng agent -c /etc/flume-ng/conf -f /etc/flume-ng/conf/flume.conf --name a1 &
ExecStop=/usr/bin/flume-ng agent stop

или любая другая команда, чтобы остановить flume-ng

Затем вы можете остановить службу с помощью systemctl stop flume-ng.

Прочтите руководство по адресу https://www.freedesktop.org/software/systemd/man/systemd.service.html для полного набора параметров, доступных для управления службой.

person Munir    schedule 03.11.2016

Вы можете просто выполнить systemctl stop flume-ng.service. При выполнении действие по умолчанию отправляет SIGTERM основному процессу и ждет до настраиваемого времени, чтобы увидеть, завершены ли процессы. Если процесс не завершается, тогда systemd отправляет сигнал SIGKILL, который выполняет работу. Если основной процесс разветвил другие процессы, systemd остановит и их, так как все они находятся в одной контрольной группе.

Вам не нужно иметь директиву ExecStop=, если у вас нет другого способа закрыть службу.

person Umut    schedule 04.11.2016

На мой взгляд, ExecStop недостаточно. Также важен KillSignal=. Сигнал, который вы используете здесь, должен быть тем, который вы хотели бы обработать внутри и безопасно выйти из приложения. Systemd будет использовать то же самое, чтобы убить ваше приложение. В случае, если ExecStop= не сможет выйти из процесса, он будет уничтожен KillSignal. Последнее средство с systemd — использовать SIGKILL и в любом случае убить ваш процесс, чтобы продолжить завершение работы системы.

person Bhush    schedule 03.03.2021