종료시 ExecStop을 무시하지만 수동으로 실행할 때 작동하는 systemd 서비스

종료시 ExecStop을 무시하지만 수동으로 실행할 때 작동하는 systemd 서비스

안녕하십니까, VNC 세션의 vmware 플레이어에서 실행 중인 VM이 종료될 때 실행되도록 텔넷 세션을 실행하는 예상 스크립트를 얻으려고 합니다. systemctl stop을 직접 실행하면 제대로 실행되지만 지금 shutdown -r을 실행하면 그런 일이 발생하지 않습니다.

내 서비스 파일:

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
Before=shutdown.target reboot.target halt.target

[Service]
Type=forking

# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
ExecStop=/root/vmware/SCO/stopsco.pl
ExecStop=/usr/bin/sleep 10
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

[Install]
WantedBy=multi-user.target

세 개의 ExecStop 라인이 순서대로 실행되어야 하고 systemctl stop vncserver@:1.service를 실행할 때 실행된다는 것이 제가 이해한 바입니다. 그러나 서버를 종료하면 실행되지 않습니다. sleep 10이 VNC를 중지합니다. 서버가 10초 동안 다운되는 것을 볼 수 있어야 하는데 그렇지 않고 그냥 크런치되고 VNC 서버가 중지됩니다. 따라서 마지막 줄은 확실히 실행되고 있지만 앞의 두 줄은 실행되지 않는 것 같거나 만약 그렇다면 기다리고 있지 않은 것입니다. "stopsco" 스크립트를 실행하는 데 약 60초가 걸립니다. 내가 놓친 부분을 누구든지 볼 수 있나요? 저는 systemd를 처음 접했습니다. 이 기능은 rc 스크립트에서 잘 작동했습니다 :)

나는 여기에 제안을 가지고 소란을 피웠습니다.systemd는 다시 시작/종료하거나 다른 프로세스를 종료하기 전에 명령이 완료될 때까지 기다립니다. 그리고 추가됨

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
Before=shutdown.target reboot.target halt.target

하지만 여전히 VNC 세션이 종료되었습니다. shutdown -r을 실행할 때 확실히 10초를 기다리지 않았지만 다시 수동으로 실행할 때는 완벽하게 작동합니다.

업데이트 :

systemctl status vncserver@:1.service
▒ vncserver@:1.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/vncserver@:1.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-09-12 00:42:04 AEST; 9h ago
  Process: 3867 ExecStop=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
  Process: 3864 ExecStop=/usr/bin/sleep 10 (code=exited, status=0/SUCCESS)
  Process: 3831 ExecStop=/root/vmware/SCO/stopsco.pl (code=exited, status=0/SUCCESS)
  Process: 3968 ExecStart=/usr/sbin/runuser -l root -c /usr/bin/vncserver %i (code=exited, status=0/SUCCESS)
  Process: 3963 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
 Main PID: 4002 (Xvnc)
   CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service
           ▒ 4002 /usr/bin/Xvnc :1 -auth /root/.Xauthority -desktop tardis.li...

                                                                               Sep 12 00:42:01 tardis.lilydaleairport.com.au systemd[1]: Starting Remote des...
Sep 12 00:42:04 tardis.lilydaleairport.com.au systemd[1]: Started Remote desk...
Hint: Some lines were ellipsized, use -l to show in full.
[root@tardis system]#

systemd는 버전입니다

systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN

관련 정보