문제가 있다
동일한 호스트에서 kill을 사용하여 ilogtaild 프로그램을 종료할 때 이 ilogtaild 장치가 여전히 활성 상태인 이유는 무엇입니까?
#systemctl status ilogtaild
● ilogtaild.service - SYSV: ilogtail is log collect agent of Simple Log Service
Loaded: loaded (/etc/rc.d/init.d/ilogtaild; static; vendor preset: disabled)
Active: active (running) since Fri 2017-08-18 12:38:07 CST; 1min 59s ago
Docs: man:systemd-sysv-generator(8)
Process: 33718 ExecStop=/etc/rc.d/init.d/ilogtaild stop (code=exited, status=0/SUCCESS)
Process: 33745 ExecStart=/etc/rc.d/init.d/ilogtaild start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/ilogtaild.service
├─33747 /usr/local/ilogtail/ilogtail
└─33749 /usr/local/ilogtail/ilogtail
#kill -9 33747 33749
#systemctl status ilogtaild
● ilogtaild.service - SYSV: ilogtail is log collect agent of Simple Log Service
Loaded: loaded (/etc/rc.d/init.d/ilogtaild; static; vendor preset: disabled)
Active: active (exited) since Fri 2017-08-18 12:38:07 CST; 2min 9s ago
Docs: man:systemd-sysv-generator(8)
Process: 33718 ExecStop=/etc/rc.d/init.d/ilogtaild stop (code=exited, status=0/SUCCESS)
Process: 33745 ExecStart=/etc/rc.d/init.d/ilogtaild start (code=exited, status=0/SUCCESS)
이봐
#systemctl is-active ilogtaild
active
ilogtaild 구성
#systemctl cat ilogtaild
# /etc/systemd/system/ilogtaild.service
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/ilogtaild
Description=SYSV: ilogtail is log collect agent of Simple Log Service
Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target z_nic_irq_set.service muahao.service e2e-qos.service
After=network-online.target network.service khotfix.service
Conflicts=shutdown.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/rc.d/init.d/ilogtaild start
ExecStop=/etc/rc.d/init.d/ilogtaild stop
괜찮아요
#systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2017-08-18 12:43:25 CST; 920ms ago
Main PID: 36532 (crond)
CGroup: /system.slice/crond.service
└─36532 /usr/sbin/crond -n -m/dev/null
#kill -9 36532
#systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: failed (Result: signal) since Fri 2017-08-18 12:43:36 CST; 2s ago
Process: 36532 ExecStart=/usr/sbin/crond -n $CRONDARGS (code=killed, signal=KILL)
Main PID: 36532 (code=killed, signal=KILL)
이봐
#systemctl is-active crond
failed
구성
#systemctl cat crond
# /usr/lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target
[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
[Install]
WantedBy=multi-user.target
답변1
● ilogtaild.service - SYSV: ilogtail은 단순 로그 서비스를 위한 로그 수집 에이전트입니다. 로드됨: 로드됨(/etc/rc.d/init.d/ilogtaild; 정적; 공급업체 기본값: 비활성화됨) … 문서: man:systemd-sysv-generator(8)
명시적으로 작성된 시스템 서비스 단위를 사용하고 있지 않습니다. LSB 헤더 정보가 누락된 systemd-sysv-generator
van Smoorenburg 스크립트로 생성된 단위를 사용하고 있습니다 . 모든 경우에 적용되는 단일 접근 방식을 취하고 약간의 추측을 통해 수정하십시오. van Smoorenburg 스크립트는 장기 실행 데몬을 시작할 수도 있고 시작하지 않을 수도 있고, PID 파일을 사용할 수도 있고 사용하지 않을 수도 있습니다. 이러한 가능성을 수용하는 서비스 단위를 생성해 보십시오.rc
systemd-sysv-generator
rc
systemd-sysv-generator
자동으로 생성된 서비스 단위에는 van Smoorenburg 스크립트 의 헤더 정보를 기반으로 명명된 PID 파일이 있습니다 RemainAfterExit=false
. (PID 파일의 이름 이 지정 되면 .)RemainAfterExit=true
rc
RemainAfterExit
false
그래서:
- 단기적으로는
/etc/rc.d/init.d/ilogtaild
RedHat 헤더를 사용하여 PID 파일 이름을 지정해야 합니다pidfile:
. 그렇지 않으면 systemd는 계속해서 van Smoorenburg 스크립트라고 가정rc
하고 장기 실행 데몬을 남겨 두지 않을 것입니다. - 장기적으로는 사용을 중단
/etc/rc.d/init.d/ilogtaild
하고systemd-sysv-generator
난수 서비스 단위로 포장하는 것에 의존하는 것을 중단해야 합니다.
추가 읽기
답변2
RemainAfterExit=no를 사용해야 합니다.
RemainAfterExit=
Takes a boolean value that specifies whether the service shall be considered active even when all its processes exited. Defaults to no.