systemd - ExecStop 없이 서비스를 정의하고 "실패" 없이 중지할 수 있습니다.

systemd - ExecStop 없이 서비스를 정의하고 "실패" 없이 중지할 수 있습니다.

저는 CentOS 7을 사용하고 있으며 Kafka 독립형 생산자(파일 커넥터)를 서비스로 시작하고 싶습니다. 명령은 다음과 같습니다:

/opt/kafka/bin/connect-standalone.sh /opt/kafka/config/connect-standalone.properties /opt/kafka/config/connect-file-source.properties

그리고 분명히 정지 명령이 없습니다. 일반적으로 Ctrl+C포그라운드 프로세스로 중지합니다.

하지만 테스트해본 결과 여러 프로세스(Zookeeper, Kafka 서버, Kafka 생산자, Storm jar 등)를 실행하기 위해 여러 터미널 콘솔 세션을 여는 것이 매우 지루하다는 사실을 발견하여 Zookeeper 및 Kafka 서버를 서비스로 변경했으며 자신의 stop스크립트. 하지만 이 경우에는 그렇지 않습니다.

systemctl start kafka-producer시도해 보았지만 systemctl stop kafka-producer서비스가 failed상태에 들어가고 멈추지 않았습니다. 서비스를 제거하고 데몬을 다시 로드한 다음 다시 수동으로 전환해야 했습니다.

kafka-producer.service:

[Unit]
Description=Kafka Producer
After=network.target

[Service]
Type=simple
ExecStart=/opt/kafka/bin/connect-standalone.sh /opt/kafka/config/connect-standalone.properties /opt/kafka/config/connect-file-source.properties
Restart=on-abort

[Install]
WantedBy=default.target

명령 없이 서비스를 조작할 수 있는 방법이 있습니까 ExecStop?

답변1

일반적으로 쉘에서 Ctrl+C를 사용하여 프로세스를 중지하면 SIGINT(인터럽트 신호)가 프로세스로 전송됩니다. (바라보다man signal)

systemd가 기본적으로 (종료 신호) 로 설정된 프로세스를 ExecStop=보내지 않고 프로세스를 중지하려고 하면 프로세스의 응답을 기다리고, 기한 내에 중지하지 못하면 systemd는 단순히 프로세스를 강제 종료하는 신호를 보냅니다. . systemd의 동작은 수정될 수 있습니다 (참조:KillSignal=SIGTERMSIGKILLKillSignal=man systemd.kill).

KillSignal=SIGINT귀하의 경우에는 일반적으로 셸에서 사용하는 CTRL+C를 시뮬레이션하기 위해 추가해 보겠습니다 . 프로세스가 이 신호를 포착하고 응답한다는 것을 알고 있지만 SIGTERM에 어떻게 응답하는지 모릅니다.

[Service]
Type=simple
ExecStart=/opt/kafka/bin/connect-standalone.sh /opt/kafka/config/connect-standalone.properties /opt/kafka/config/connect-file-source.properties
KillSignal=SIGINT
Restart=on-abort

답변2

HDP 2.6.4 및 Kafka 0.10.1을 설치한 후 스크립트는 다음을 보고합니다.

/usr/hdp/2.6.4.0-91/kafka/bin$ ./connect-standalone.sh
USAGE: ./connect-standalone.sh [-daemon] connect-standalone.properties

옵션을 데몬 run 의 속성으로 사용하세요 -daemon.

이것이 당신에게 가능합니까?

관련 정보