Ubuntu 14.04 启动时任务可中止

Ubuntu 14.04 启动时任务可中止

我有一个虚拟机需要启动、执行特定任务,然后自行关闭。

还需要能够中止特殊的启动序列以获得“常规”启动行为,即在应用程序运行之前或关闭之前。

我尝试使用以下内容来完成此任务/etc/rc.local

#!/bin/bash
trap "echo;echo Resuming regular system startup...;exit" SIGINT
echo "Press Ctrl+C within 10 seconds to skip application run..."
sleep 10
su ubuntu -c /home/ubuntu/application.py
echo "Press Ctrl+C within 30 seconds to abort shutdown..."
sleep 30
shutdown -h now

当我登录时以 root 身份直接执行 /etc/rc.local 时,它运行良好并且按预期工作,但当它实际作为系统启动的一部分运行时,它似乎不起作用。它运行良好,但它不会响应 Ctrl+C 实际上可中止。

SSH:在执行此脚本期间插入并发出 akillall -INT rc.local似乎也不会停止脚本的执行,killall -9 rc.local但确实会停止它,并将控制台放入login.

该系统似乎使用 upstart 进行引导,如下所示:

root@fundie:~# ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:01 /sbin/init
root@fundie:~# /sbin/init --version
init (upstart 1.12.1)
Copyright (C) 2006-2014 Canonical Ltd., 2011 Scott James Remnant

This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我缺少什么?

答案1

我设法通过使用解决了这个问题普利茅斯,这是在启动和关闭 Ubuntu 系统时提供图形“启动”屏幕的应用程序。我能够使用它以迂回方式将 SIGINT 发送到 rc.local 脚本。

这有点像黑客,但这就是我最终所做的:

#!/bin/bash
plymouth watch-keystroke --command="kill -INT $$" --keys=' ' &
trap "echo;echo Resuming regular system startup...;exit" SIGINT
for i in `seq 10 -1 1`
do
        echo -ne "\rPress spacebar within $i second(s) to skip application run... "
        sleep 1
done
echo
su ubuntu -c /home/ubuntu/application.py
for i in `seq 30 -1 1`
do
        echo -ne "\rPress spacebar within $i second(s) to abort shutdown... "
        sleep 1
done
echo
shutdown -h now

这足以满足我的目的。

相关内容