Abbruchbare Aufgabe beim Start unter Ubuntu 14.04

Abbruchbare Aufgabe beim Start unter Ubuntu 14.04

Ich habe eine VM, die hochfahren, eine bestimmte Aufgabe ausführen und sich dann selbst herunterfahren muss.

Es muss auch möglich sein, die spezielle Startreihenfolge abzubrechen, um das „normale“ Startverhalten zu erhalten, d. h. entweder vor dem Ausführen der Anwendung oder vor dem Herunterfahren.

Ich habe versucht, dies mithilfe des Folgenden zu erreichen /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

Dies läuft einwandfrei und funktioniert wie erwartet, wenn ich es direkt als /etc/rc.local als Root ausführe, wenn ich angemeldet bin, aber es scheint, dass es nicht funktioniert, wenn es tatsächlich als Teil des Systemstarts ausgeführt wird. Es läuft einwandfrei, reagiert aber nicht auf Strg+C, um tatsächlich abgebrochen werden zu können.

Das Anmelden per SSH während der Ausführung dieses Skripts und die Ausgabe von killall -INT rc.localscheint die Ausführung des Skripts ebenfalls nicht zu stoppen, killall -9 rc.localstoppt sie jedoch und lässt die Konsole in fallen login.

Es scheint, dass dieses System Upstart zum Booten verwendet, wie unten festgestellt:

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.

Was vermisse ich?

Antwort1

Ich konnte das Problem umgehen, indem ichPlymouth, das ist die Anwendung, die den grafischen „Splash“-Bildschirm beim Booten und Herunterfahren eines Ubuntu-Systems bereitstellt. Ich konnte damit auf Umwegen SIGINT an das Skript rc.local senden.

Es ist ein bisschen ein Hack, aber das hier ist, was ich letztendlich gemacht habe:

#!/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

Dies wird für meine Zwecke ausreichend sein.

verwandte Informationen