서비스 파일의 쉘 스크립트를 사용하여 시스템 모니터 프로세스를 시작하는 방법은 무엇입니까?

서비스 파일의 쉘 스크립트를 사용하여 시스템 모니터 프로세스를 시작하는 방법은 무엇입니까?

하나는 기본 프로세스로, 다른 프로세스는 보조 프로세스로 시작하는 여러 프로세스를 시작하는 스크립트를 호출하는 서비스 파일을 Linux에 작성했습니다.

서비스 파일:

[Unit]
Description=TEST service

Requires=abc.service
Wants=def.service

RefuseManualStop=yes

[Service]
Type=Forking
KillSignal=SIGTERM
# We prefix '-' to tell systemd that ignore the non-zero return values on stop service
ExecStart=-/bin/bash test_abc.sh
ExecStopPost=-/root/.abc/abc_stop.sh
# On reload we just perform restart of service
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
PIDFile=/var/run/abc.pid

[Install]
WantedBy=multi-user.target

그리고 서비스가 시작되면 아래와 같이 상태가 표시됩니다.

[root@CentOS-126 core]# systemctl status abc.service
� abc.service - ABC service
   Loaded: loaded (/usr/lib/systemd/system/abc.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-01-22 14:13:45 IST; 43s ago
  Process: 13286 ExecStopPost=/root/.abc/abc_stop.sh (code=exited, status=0/SUCCESS)
 Main PID: 13691 (abc-00)
   CGroup: /system.slice/abc.service
           ��13691 /usr/sbin/abc -c 0x111 --proc-type=primary
           ��13745 abctm
           ��13756 /usr/sbin/abc -c 0x111 --proc-type=secondary
           ��13776 /usr/sbin/abc -c 0x111 --proc-type=secondary

보시다시피 기본 프로세스는 상태의 MAIN PID와 동일합니다. 그러나 프로세스를 종료하면 systemd가 자동으로 프로세스를 다시 시작해야 합니다. 내 경우에는 그런 일이 일어나지 않습니다. 나는 type=forkingMainPID가 고려되지 않은 경우 다른 답변을 읽었습니다 . 나는 그것을 교체하려고 시도했지만 type=simple그것도 도움이되지 않았습니다. 어떤 도움이라도 정말 감사하겠습니다!

관련 정보