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

這足以滿足我的目的。

相關內容