Ich möchte einen Befehl planen, der nach dem Neustart auf einer Linux-Box ausgeführt wird. Ich weiß, wie das geht, damit der Befehl nach jedem Neustart mit einem @reboot
crontab-Eintrag konsistent ausgeführt wird. Ich möchte jedoch, dass der Befehl nur einmal ausgeführt wird. Nachdem es ausgeführt wurde, sollte es aus der Warteschlange der auszuführenden Befehle entfernt werden. Ich bin im Wesentlichen auf der Suche nach einem Linux-Äquivalent zu RunOnce in der Windows-Welt.
Falls es darauf ankommt:
$ uname -a
Linux devbox 2.6.27.19-5-default #1 SMP 2009-02-28 04:40:21 +0100 x86_64 x86_64 x86_64 GNU/Linux
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
$ cat /etc/SuSE-release
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 0
Gibt es eine einfache, skriptfähige Möglichkeit, dies zu tun?
linux
scheduled-task
Christopher Parker
quelle
quelle
Antworten:
Erstellen Sie einen
@reboot
Eintrag in Ihrer crontab, um ein Skript mit dem Namen auszuführen/usr/local/bin/runonce
.Erstellen Sie eine Verzeichnisstruktur mit dem Namen
/etc/local/runonce.d/ran
usingmkdir -p
.Erstellen Sie das Skript
/usr/local/bin/runonce
wie folgt:Legen Sie nun ein Skript, das Sie beim nächsten Neustart ausführen möchten (nur einmal) in das Verzeichnis
/etc/local/runonce.d
undchown
undchmod +x
es entsprechend. Sobald es ausgeführt wurde, wird es in dasran
Unterverzeichnis verschoben und das Datum und die Uhrzeit werden an den Namen angehängt. Es wird auch einen Eintrag in Ihrer Datenbank gebensyslog
.quelle
man logger
.$file
Variable den vollständigen Pfad oder nur den Dateinamen?Ich schätze die Bemühungen, die Dennis Williamson unternommen hat, sehr . Ich wollte es als Antwort auf diese Frage akzeptieren, da es jedoch elegant und einfach ist:
Ich denke, seine Lösung wäre großartig als Out-of-the-Box-Feature einer Linux-Distribution.
Davon abgesehen habe ich mein eigenes Skript geschrieben, um mehr oder weniger das Gleiche wie Dennis 'Lösung zu erreichen. Es sind keine zusätzlichen Installationsschritte erforderlich und es ist kein Root-Zugriff erforderlich.
Speichern Sie dieses Skript (zB:
runonce
),chmod +x
und laufen:Im Falle eines Tippfehlers können Sie einen Befehl mit dem Flag -r aus der runonce-Warteschlange entfernen:
Die Verwendung von sudo funktioniert so, wie Sie es erwarten würden. Nützlich, um einen Server nur einmal nach dem nächsten Neustart zu starten.
Einige Notizen:
quelle
Erstellen Sie zB
/root/runonce.sh
:Hinzufügen zu
/etc/rc.local
:quelle
Richten Sie das Skript in /etc/rc5.d mit einem S99 ein und lassen Sie es sich nach dem Ausführen selbst löschen.
quelle
Sie können dies mit dem
at
Befehl tun , obwohl ich bemerke, dass Sie nicht (zumindest auf RHEL 5, auf dem ich getestet habe)at @reboot
oder verwenden könnenat reboot
, aber Sie könnenat now + 2 minutes
und dann verwendenshutdown -r now
.Dies erfordert nicht, dass das System länger als 2 Minuten ausgeführt wird.
Es kann nützlich sein, wenn Sie 0 einrichten möchten, obwohl ich mir eher wünsche, dass der Befehl 'runonce' ein Standard-Kit ist.
quelle
atd
Ihr Befehl möglicherweise während des Herunterfahrens ausgeführt wird , wenn Ihr System länger als 2 Minuten bis zum Stopp benötigt. Dies kann vermieden werden,atd
indem Sie den Befehl stoppen, bevor Sie ihn ablegenatd now
und anschließend neu starten.Ich halte diese Antwort für die eleganteste:
Skript
/etc/init.d/script
einfügen und mit letzter Zeile selbst löschen:rm $0
Wenn das Skript nicht zu 100% ausfallsicher ist, sollten Sie wahrscheinlich Ausnahmen behandeln, um eine schwerwiegende Fehlerschleife zu vermeiden.
quelle
Früher
chkconfig
habe ich auf meinem System ein Skript automatisch einmal nach dem Start ausgeführt und nie wieder. Wenn Ihr System ckconfig (Fedora, RedHat, CentOs usw.) verwendet, funktioniert dies.Zuerst das Drehbuch:
run-once
/etc/init.d/
chkconfig run-once on
Wenn das System hochfährt, wird Ihr Skript einmal und nie wieder ausgeführt.
Das heißt, nie wieder, es sei denn, Sie möchten es. Sie können das Skript jederzeit mit dem
chkconfig run-once on
Befehl wieder aktivieren .Ich mag diese Lösung, weil sie nur eine einzige Datei auf dem System ablegt und weil der Befehl run-once bei Bedarf erneut ausgegeben werden kann.
quelle
In RedHat- und Debian-Systemen können Sie dies über /etc/rc.local tun, es ist eine Art autoexec.bat.
quelle