
こんにちは。VNC セッションで VMware Player で実行されている VM のシャットダウン時に、telnet セッションを実行する expect スクリプトを実行しようとしています。手動で 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
私の理解では、3 つの ExecStop 行は順番に実行されるはずで、systemctl stop vncserver@:1.service を実行すると実行されます。しかし、サーバーをシャットダウンすると、実行されません。sleep 10 は VNC サーバーが 10 秒間停止するのを止めますが、これは確認できるはずですが、確認できず、クラッシュして VNC サーバーが停止します。つまり、最後の行は確実に実行されていますが、前の 2 行は実行されていないようです。実行されていたとしても、待機されていません。"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