upstart prestop 在关机期间被终止

upstart prestop 在关机期间被终止

我正在运行 Ubuntu 服务器,使用 upstart 作业托管虚拟机。我让它在启动时启动,并在退出时关闭主机,但我似乎无法让它在主机关闭时暂停。如果我使用initctl stop vmservice,则暂停会正确发生 - 但如果我用shutdown -h nowreboot,它看起来就像被杀死了(我尝试在停止前脚本中放置一个 sleep ,其行为相同)。任何帮助都将不胜感激。

我对 upstart 还很陌生,因此我也很感谢任何其他反馈(包括,我在停止后调用 shutdown 是否做了“正确”的事情?)。

我的工作(“启动”从 kdm.conf 中提取;.startvm 和 .stopvm 只是启动和暂停虚拟机):

start on (filesystem
          and started dbus
          and (graphics-device-added fb0 PRIMARY_DEVICE_FOR_DISPLAY=1
               or drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
               or stopped udevtrigger))
stop on runlevel [016]

pre-stop script
    exec su -c "/home/unprivileged_user/.stopvm" - unprivileged_user
end script

env XORGCONFIG=/etc/X11/xorg.conf
exec su -c "xinit /home/unprivileged_user/.startvm -- /etc/X11/xinit/xserverrc :0" - unprivileged_user

post-stop script
    shutdown -h now
end script

答案1

Upstart 将在等待预停止或发送到主进程的信号 5 秒后发送 SIGKILL(即 kill -9)。

使用

kill timeout 10

给自己 10 秒钟的时间等待死机。实际上你不能给自己超过这个时间,因为关机只会等待 10 秒钟让所有进程死机,然后才会完全关闭。确保你的虚拟机已停止整个系统关闭开始:

用这个:

stop on starting rc RUNLEVEL=[016]

这将确保您的虚拟机在系统开始正常关机程序之前完全停止(尽管终止超时仍然有效,因此也要提高它!)

另外,虽然您似乎已经从 gdm 或 lightdm 复制了它,但您的 SUPER 复杂启动实际上根本没有必要。

如果您只是希望在显示管理器运行时运行虚拟机,则这要简单得多:

start on started lightdm or started gdm

相关内容