![systemd 服务在关闭时忽略 ExecStop,但手动运行时可以工作](https://linux22.com/image/727045/systemd%20%E6%9C%8D%E5%8A%A1%E5%9C%A8%E5%85%B3%E9%97%AD%E6%97%B6%E5%BF%BD%E7%95%A5%20ExecStop%EF%BC%8C%E4%BD%86%E6%89%8B%E5%8A%A8%E8%BF%90%E8%A1%8C%E6%97%B6%E5%8F%AF%E4%BB%A5%E5%B7%A5%E4%BD%9C.png)
大家好,尝试获取一个运行 telnet 会话的 expect 脚本,以便在 VNC 会话中关闭在 vmware player 中运行的 VM 时运行。当我手动运行 systemctl stop 时,它运行良好,但是当我执行 shutdown -r now 时,它不会发生。
我的服务文件:
[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