저는 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=
SIGTERM
SIGKILL
KillSignal=
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
.
이것이 당신에게 가능합니까?