Crontab-Job beginnt +1 Minute nach @reboot


42

Benötigen Sie ein Skript, das bei jedem Neustart in +1 Minute ausgeführt wird. Ich habe eine Aufzeichnung erstellt, @rebootaber für mein Drehbuch ist es noch zu früh. Wie kann ich es nach dem Neustart ausführen?


2
Warum ist es zu früh ? Vielleicht ist ein Init-Skript besser geeignet (in Bezug auf Abhängigkeiten, z. B. muss für dieses Skript zuerst ein Netzwerk eingerichtet werden ).
Sr_

Mein Skript muss nach allen anderen ausgeführt werden, die letzten in kurzen Worten
Yurij73

Da Ihr Job nach allem ausgeführt werden muss und das Konzept von allem sehr variabel ist (das Hinzufügen einer neuen autostart @ reboot-Anwendung ist keine Seltenheit), liegt es meiner Meinung nach an Ihnen, Ihren Job in die rc-Skripte in a einzufügen Art und Weise, die Ihren Zweck dient. In der Regel möchten Sie, dass Ihre Aufgabe den in /etc/rc.local angegebenen Aufgaben am Ende folgt. Abhängig von der Startkonfiguration Ihres Systems ist dies jedoch möglicherweise nicht immer der Fall. Testen Sie es also und prüfen Sie, ob es für Sie funktioniert.
MelBurslan

Klingt nach einem Fall für Upstart?
Nafg

Antworten:


64

Soll das Skript immer nur eine Minute nach dem Hochfahren ausgeführt werden, oder kann es auch zu anderen Zeiten verwendet werden? Im ersten Fall können Sie sleep 60am Anfang Ihres Skripts oder im zweiten Fall in die crontab-Datei einfügen:

@reboot sleep 60 && my_script.sh

Wie von sr_ bereits erwähnt, wird dies möglicherweise falsch angegangen, und ein geeignetes init.d- oder rc.d-Skript wäre eine robustere Lösung.


1
Oder verwenden Sie eine Befehlszeilenoption, um die Verzögerung zu optimieren (z. B. script -s Xdie sleep Xinnerhalb des Skripts übersetzt werden würde ).
Peterph

Kann ich dies auf die Datei taskrunner in /etc/init.d/ anwenden?
Andres Angel

@AndresAngel - Es tut mir leid, ich weiß es nicht. Ich FreeBSD zu benutzen , die nicht über taskrunnernoch, was das betrifft,/etc/init.d
D_Bye

auf meinem rhel7 funktioniert der schlaf überhaupt nicht, er schläft für immer und kommt nie wieder.
Inder R Singh

16

Wenn Sie nach dem Neustart etwas ausführen müssen, wenn das Netzwerk verfügbar wird, können Sie beispielsweise eine systemd-Einheit schreiben, die zur gewünschten Zeit ausgeführt wird (dies funktioniert natürlich nur auf Systemen mit systemd).

Erstellen Sie dazu eine Datei /etc/systemd/system/my_script.servicemit folgendem Inhalt:

[Unit]
Description=My script that requires network
After=network.target

[Service]
Type=oneshot
ExecStart=/full/path/to/my_script.sh

[Install]
WantedBy=multi-user.target

Dann führen Sie aus:

sudo systemctl daemon-reload
sudo systemctl enable my_script

Sie sind fertig!


11

Ich würde verwenden at. Wie in:

@reboot echo /root/bin/do_the_stuff | at now + 2 minutes
# at assigns it an execution time truncated to whole minutes,
# so this means it will execute in 1--2 minutes.

... mit der erwähnten Einschränkung, dass Sie, wenn Sie es wirklich nach allen anderen Dingen ausführen möchten, überprüfen sollten, wie dies in dem Init gemacht wird, das Ihr Betriebssystem verwendet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.