systemd 服務在關閉時忽略 ExecStop,但在手動運行時可以工作

systemd 服務在關閉時忽略 ExecStop,但在手動運行時可以工作

天哪,嘗試取得一個執行 telnet 會話的期望腳本,以便在 VNC 會話中 vmware 播放器中執行的虛擬機器關閉時執行。當我手動運行 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

相關內容