Wie konfiguriere ich Upstart so, dass beim Herunterfahren ein Skript ausgeführt wird, wenn der Vorgang länger als 10 Sekunden dauert?

Wie konfiguriere ich Upstart so, dass beim Herunterfahren ein Skript ausgeführt wird, wenn der Vorgang länger als 10 Sekunden dauert?

Ich verwende Ubuntu 11.10 in einer virtuellen Maschine (VirtualBox), um mehr über die Entwicklung unter Linux zu erfahren. Ich verwende ein Git-Repository, um meine Arbeit zu speichern, und habe ein Skript geschrieben, um meine Arbeit zu bündeln und im freigegebenen Ordner zu speichern, damit ich sie verwenden kann, wenn die virtuelle Maschine nicht ausgeführt wird.

Ich möchte dieses Skript vor dem Herunterfahren automatisch ausführen, damit meine Arbeit immer verfügbar ist, wenn die VM ausgeschaltet ist (derzeit muss ich das Skript manuell ausführen).

Ich weiß nicht, ob Upstart die beste Möglichkeit ist, dies zu erreichen, aber dies ist die Konfiguration, die ich als Test geschrieben habe:

description     "test script to run at shutdown"

start on runlevel [056]

task

script
touch /media/sf_LinuxEducation/start
sleep 15
touch /media/sf_LinuxEducation/start-long
end script

pre-start script
touch /media/sf_LinuxEducation/pre-start
sleep 15
touch /media/sf_LinuxEducation/pre-start-long
end script

post-start script
touch /media/sf_LinuxEducation/post-start
sleep 15
touch /media/sf_LinuxEducation/post-start-long
end script

pre-stop script
touch /media/sf_LinuxEducation/pre-stop
sleep 15
touch /media/sf_LinuxEducation/pre-stop-long
end script

post-stop script
touch /media/sf_LinuxEducation/post-stop
sleep 15
touch /media/sf_LinuxEducation/post-stop-long
end script

Das Ergebnis ist, dass nur eine Berührung ausgeführt wird (die erste Berührung vor dem Start). Was muss ich ändern, damit eine der Berührungen nach dem Ruhezustand funktioniert? Oder gibt es einen einfacheren Weg, dies zu erreichen?

Dank im Voraus.

Antwort1

DerUpstart-Einführung, Cookbook und Best Practicesverfügt über zahlreiche Codefragmente, die Sie zum Erstellen von Upstart-Aufgaben und -Jobs verwenden können.

DerHerunterfahrenAbschnitt des Kochbuchs besagt, dass /etc/init/rc.confausgeführt wird und aufgerufen wird /etc/init.d/rc. Dies wiederum wird schließlich aufrufen /etc/init.d/sendsigs. Wenn Sie also start on starting rcdann Ihre Aufgabe ausführen, bevor rc (und die Sigterms, die den Prozess normalerweise beenden würden) ausgeführt wird.

Datei: /etc/init/test.conf

description "test script to run at shutdown"

start on starting rc
task
exec /etc/init/test.sh

Datei: /etc/init/test.sh

touch /media/sf_LinuxEducation/start
sleep 15
touch /media/sf_LinuxEducation/start-long

Antwort2

Ich glaube, das geht nicht überEmporkömmling, als die/etc/init.d/sendsigsSkript, das aufgerufen wird durchEmporkömmlingBeim Anhalten/Neustarten werden alle Prozesse ( killall5 -9) innerhalb von 10 Sekunden beendet, und selbst wenn dies nicht gelingt, wird alles ausgehängt und das System heruntergefahren.

Am besten verwenden Sie den rostigen/etc/init.dStilskripte.

Beispiel:/etc/init.d/shutdown_job

#! /bin/sh
### BEGIN INIT INFO
# Provides:          shutdown_job
# Required-Start:    
# Required-Stop:     sendsigs
# Default-Start:
# Default-Stop:      0 6
# Short-Description: bla
# Description: 
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/lsb/init-functions

do_stop () {
    date > /root/s.log
    sleep 20
    date >> /root/s.log
}

case "$1" in
  start)
    # No-op
    ;;
  restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
  stop)
    do_stop
    ;;
  *)
    echo "Usage: $0 start|stop" >&2
    exit 3
    ;;
esac

:

Aktivieren Sie dann das Skript

sudo update-rc.d shutdown_job start 19 0 6 .

Dadurch wird das Skript vor densendsigsSkript auf den Runleveln 0 bis 6 (Herunterfahren, Neustart). Dieses Beispielskript zeichnet das Datum auf, schläft dann 20 Sekunden lang und zeichnet dann das Datum erneut auf, um/root/s.log.)

Mehr Info:

verwandte Informationen