在关闭之前运行命令似乎不起作用

在关闭之前运行命令似乎不起作用

我已经根据我找到的一些指南创建了一个 ubuntu 服务器信息亭,并且我试图在关闭之前停止该信息亭。该信息亭正在自动或通过命令手动启动sudo start kiosk,并且可以在运行时停止sudo stop kiosk

如果浏览器已关闭,信息亭代码将重新打开浏览器。结果是我无法关闭服务器,因为它不断创建新的浏览器会话。

我尝试设置一个简单运行的关闭前脚本sudo stop kiosk,但它似乎仍然不起作用。

我所做的如下:

  1. 在目录中创建了一个stop_kiosk.sh文件/etc/init.d
  2. 将文件符号链接到/etc/rc0.d/K00StopKiosk
  3. 将文件符号链接到/etc/rc6.d/K00StopKiosk

但是,它会关闭浏览器实例,并立即打开一个新的浏览器实例。所有其他会话都已关闭,我无法继续与服务器交互,只能与浏览器交互。我必须手动关闭电脑(这里使用 virtualbox,所以我只是退出 virtualbox)。

如果我sudo stop kiosk在关闭之前手动运行,它将正确停止信息亭,关闭浏览器并终止 openbox、xorg 等。然后我可以安全、轻松地关闭,没有任何问题。

kiosk 文件如下:

/opt/kiosk.sh:

#!/bin/bash

xset -dpms
xset s off
openbox-session &

while true; do 
    rm -rf ~/.{config,cache}/google-chrome/
    google-chrome --disable-translate \
                  --disable infobars \ 
                  --disable-suggestions-service \ 
                  --disable-save-password-bubble \
    --no-first-run 'http://google.com'
done

/etc/init/kiosk.conf:

start on (filesystem and stopped udevtrigger)
stop on runlevel [06]

console output
emits starting-x

respawn

exec sudo -u user startx /etc/X11/Xsession /opt/kiosk.sh --

答案1

您正在使用 的/opt/kiosk.sh会话文件startx。因为该脚本中编码了一个无限循环,所以您的脚本每次被终止时都会重新打开浏览器。

与其使用while true它,不如执行检查以查看该服务是否正在关闭。不幸的是,我对 upstart 不够熟悉,不知道什么测试条件将决定系统何时关闭。像这样的新while循环可能就足够了(这取代了脚本中的循环kiosk.sh):

while [[ $(status kiosk) != */stopping* ]]

该循环等待status kiosk命令返回包含“/stopping”的字符串,并在返回时终止循环。

我希望有更多经验的人upstart可以纠正我的实施。 :)

相关内容