Laufender Befehl beim Start auf crontab

24

Ich wollte einen Befehl auf unserem Linux ausführen, nachdem der Neustart abgeschlossen war. Ich sah, dass dies mit crontab möglich ist. Ich wollte diesen Befehl ausführen

sudo ifdown eth0 && sudo ifup -v eth0

auf dem crontab kann ich einfach machen:

@reboot sudo ifdown eth0 && sudo ifup -v eth0

oder muss ich das in einem Skript speichern?

Danke dir

Lottie
quelle
7
Crontab scheint ein falsches Tool für den Neustart von eth0 zu sein. Warum nicht diesen Befehl (ohne sudo) in /etc/rc.local einfügen?
Mikewhatever
Wofür brauchst du das? Diese Aufgaben werden normalerweise automatisch während des Startvorgangs ausgeführt und müssen NIEMALS separat von den automatisierten Startvorgängen ausgeführt werden ...
Thomas Ward
1
@mikewhatever Ich kann im Moment nicht upvoten, aber ich möchte mich nur bei dir dafür bedanken, dass du das vorgeschlagen hast.
Lottie

Antworten:

34

Ein paar Anmerkungen hier, bevor dies funktionieren würde:

  1. Nicht sudofür Cronjobs verwenden. Bearbeiten Sie rootstattdessen die Crontab von 's anstatt Ihrer eigenen, z. B. sudo crontab -eund geben Sie dann Befehle ohne ein sudo.
  2. Wie @mikewhatever erwähnt, ist dies eine seltsame Verwendung für cronund würde wahrscheinlich besser /etc/rc.localvor der exit 0Zeile platziert werden.
  3. Wenn Sie uns genau mitteilen, wonach Sie suchen, können wir Sie möglicherweise zu einer Protokoll- oder Konfigurationsoption weiterleiten (ein Neustart Ihrer Netzwerkdienste beim Start fühlt sich etwas hackisch an).
  4. Auf den meisten Systemen @rebootsollte YMMV auch nach einem harten Herunterfahren oder Absturz laufen, es gibt aber unterschiedliche Cron-Implementierungen also. Ich habe an verschiedenen Stellen Kommentare gesehen, die beides behaupteten.

EDIT (2016.02.17): um einen falschen Text auf absoluten Pfaden; Kudos @muru
EDIT (2016.10.17): hinzugefügt Shutdown note
EDIT (2017.09.11): Überarbeitete Shutdown Note. Da bin ich mir nicht sicher.

TheSchwa
quelle
ok möchte nur klarstellen, ich sollte nur den vollständigen Befehl schreiben, etc/rc.localohne das sudo. Dann ist es nur ifdown eth0 & sudo ifup -v eth0 Ausfahrt 0
Lottie
cronverwendet das PATHin /etc/environment, was hat /sbin.
muru
Ich habe getan, was @mikewhatever andeutete, und es hat funktioniert. Vielen Dank
Lottie
1
@TheSchwa Sollte sein. Spätestens seit 12.04 wird /etc/pam.d/crongeladen pam_env, also /etc/environmentsollte gelesen und der voreingestellte PATHWert verwendet werden. Diese Antwort wurde kurz vor dem 12.04 veröffentlicht.
muru
2
@TheSchwa Die Aussage, dass der Neustart von cron bei einem Kaltstart nicht ausgeführt wird, ist falsch. Zeilen mit Neustart werden ausgeführt, wenn der crond-Daemon startet (Punkt). Das ist, ob es ein Warmstart, ein Kaltstart ist oder ob es keinen Start gab, und ich habe crond einfach manuell heruntergefahren und erneut gestartet. Der crond-Daemon weiß nicht, warum er neu gestartet wird, und kümmert sich nicht darum. Er führt bei jedem Neustart einfach einen Neustart durch.
Kurt Fitzner
6

Sie können hierfür crontab verwenden. Wenn Sie jedoch crontab verwenden sudo, benötigen Sie hierfür eine NOPASSWDRegel sudoers. (Siehe Ausführen eines Cron-Jobs mit dem Befehl sudo .)

Es wäre einfacher, /etc/rc.localdiese Befehle vor der exit 0Zeile zu bearbeiten und hinzuzufügen .

muru
quelle