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 zur Verwendung im freigegebenen Ordner zu speichern, während 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 der beste Weg ist, um 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, um eine der Berührungen nach dem Schlafengehen zu sehen, um zu arbeiten? Oder gibt es einen einfacheren Weg, dies zu erreichen?
Danke im Voraus.
test.conf
ist nur ein zufälliger Dateiname. Sie könnten genauso einfach verwendenwhatEverYouWant.conf
. Ihr Kommentar zeigt auch, dass Sie das in der Antwort erwähnte "Kochbuch" nicht gelesen haben. Wenn Sie in Abschnitt 4.2 nachsehen, wird die Jobkonfigurationsdatei ausführlicher erläutert.Ich denke, dies kann nicht über Upstart erfolgen , da /etc/init.d/sendsigs Skript , das von Upstart beim Anhalten / Neustarten aufgerufen wird , alle Prozesse (
killall5 -9
) innerhalb von 10 Sekunden und selbst wenn dies nicht erfolgreich ist, funktioniert es zum Abhängen und Herunterfahren.Der beste Weg wäre, die rostigen Skripte /etc/init.d zu verwenden .
Beispiel: /etc/init.d/shutdown_job
Aktivieren Sie dann das Skript
Dadurch wird das Skript vor das Sendsigs- Skript auf Runlevel 0 bis 6 gestellt (Herunterfahren, Neustart). Dieses Beispielskript zeichnet das Datum auf, schläft dann 20 Sekunden lang und zeichnet dann das Datum erneut auf /root/s.log auf .)
Mehr Info:
man update-rc.d
quelle
touch /media/sf_LinuxEducation/start
undtouch /media/sf_LinuxEducation/start-long
direkt neben den Datumsbefehlen hinzugefügt . Die Daten werden protokolliert, aber die Berührungen werden nicht berührt. Ich frage mich daher, ob dieses Laufwerk zum Zeitpunkt der Ausführung des Skripts nicht bereitgestellt ist. Ich denke, es könnte etwas mit dem NN-Argument zu tun haben, obwohl ich nicht sicher bin, wie dieses Argument wirklich funktioniert (die Manpage erklärt es auf eine sehr umwerfende Art und Weise). Woher wissen Sie, welche Zahl (oder welches Zahlenpaar) in diesem Argument festgelegt werden soll?/etc/rc6.d
angezeigt. Das Skript zum Herunterfahren von 19 sollte also ausgeführt worden sein, bevor die Bereitstellung aufgehoben wird (> 31). Aber warum versuchen Sie nicht Ihre Hypothese und berühren/root
stattdessen eine Datei ?/etc/rc6.d
zeigt, dass die freigegebenen Ordner mit demK70vboxadd
Skript ein- und ausgehängt werden . Würde das Ändern des NN-Arguments (für mein Skript) in 71 dazu führen, dass mein Skript vor dem Aufheben der Bereitstellung von freigegebenen VB-Ordnern ausgeführt wird? Ich werde es später heute versuchen.touch /root/start
vor demsleep 20
Befehl ein hinzugefügt und es wird keine Datei erstellt. Ich weiß nicht einmal, wo ich anfangen soll, um herauszufinden, warum. Die Daten werden gerne zur/root/s.log
Datei hinzugefügt. Warum kann ich eine Datei nicht berühren?