在 CentOS 6 中用脚本替换 TTY

dev*_*ull 1 startup centos upstart

我将如何在 CentOS 6 中用自定义脚本替换 TTY。CentOS 6 使用 upstart 而不是标准的 SysV init 脚本,所以我很难弄清楚它是如何工作的。

通常(在 SysV init 脚本中),我会编辑 /etc/inittab 并用我的脚本替换 mingetty 行之一,如下所示:

1:2345:respawn:/root/myscript tty1
Run Code Online (Sandbox Code Playgroud)

但是,对于 Upstart,此文件没有相关行,因此我不确定如何完成此操作。

dev*_*ull 5

我已经想通了。

首先,我修改了 /etc/init/start-ttys.conf 以将其用于脚本部分:

script
    . /etc/sysconfig/init
    for tty in $(echo $ACTIVE_CONSOLES) ; do
          [ "$RUNLEVEL" = "5" -a "$tty" = "$X_TTY" ] && continue
            if [ "$tty" == "/dev/tty1" ]; then
                    initctl start myjob TTY=$tty
                    continue
            fi
            initctl start tty TTY=$tty
    done
end script
Run Code Online (Sandbox Code Playgroud)

然后我创建了/etc/init/myjob.conf:

stop on runlevel [012456]

respawn
exec /usr/bin/openvt -c 1 -f -e /root/myscript
Run Code Online (Sandbox Code Playgroud)

这最终会在 tty1 上启动 /root/myscript,而不是 mingetty。我不确定这是否是最简单的方法,但效果很好。