systemd service ignorando ExecStop no desligamento, mas funciona quando executado manualmente

1

G'day, tentando obter um script expect que executa uma sessão telnet para ser executado no desligamento de uma VM em execução no vmware player em uma sessão VNC. Ele funciona muito bem quando eu executo systemctl parar manualmente, mas quando eu faço um desligamento -r agora, isso não acontece.

Meu arquivo de serviço:

[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

Entendo que as três linhas ExecStop devem ser executadas, em ordem, e quando eu executo systemctl stop vncserver @: 1.service Mas quando eu desligar o servidor, eles não são executados - o sleep 10 iria parar o servidor VNC indo para baixo por 10 segundos, que eu deveria ser capaz de ver, mas isso não acontece, ele só vai crunch e o servidor VNC pára. Então, a última linha está sendo executada, com certeza, mas as duas anteriores não parecem estar, ou se estão, elas não estão sendo esperadas - o script "stopsco" leva cerca de 60 segundos para ser executado. Alguém pode ver o que estou perdendo? Eu sou novo no systemd, este material funcionou bem com scripts rc:)

Eu me preocupei com a sugestão aqui: systemd para esperar o comando concluir antes de reiniciar / desligar ou matar outros processos e adicionado

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

mas ainda assim apenas bloqueou a sessão VNC, certamente não esperou por 10s quando eu executei o shutdown -r, mas novamente, ele funciona perfeitamente quando executado manualmente.

Atualização:

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 é a versão

systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
    
por Carl Ivan Brewer 11.09.2018 / 16:19

0 respostas