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?

Yurij73
quelle
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.

D_Bye
quelle
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!

Envek
quelle
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.

klappern
quelle