447 Stimmen

Alle 30 Sekunden einen Cron laufen lassen

Ok, ich habe also einen Cron, den ich alle 30 Sekunden ausführen muss.

Hier ist, was ich habe:

*/30 * * * * /bin/bash -l -c 'cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\'''

Es läuft, aber läuft es alle 30 Minuten oder alle 30 Sekunden?

Außerdem habe ich gelesen, dass Cron vielleicht nicht das beste Werkzeug ist, wenn ich es so oft laufen lasse. Gibt es ein anderes besseres Tool, das ich unter Ubuntu 11.04 verwenden oder installieren kann und das eine bessere Option ist? Gibt es eine Möglichkeit, den obigen Cron zu reparieren?

8voto

lingyfh Punkte 1315

Unter der Leitung /etc/cron.d/

neu eine Datei erstellen excute_per_30s

* * * * * yourusername  /bin/date >> /home/yourusername/temp/date.txt
* * * * * yourusername sleep 30; /bin/date >> /home/yourusername/temp/date.txt

führt cron alle 30 Sekunden aus

4voto

Huzefa Khan Punkte 59

Der zeitbasierte Scheduler von Linux Cron führt standardmäßig keine Aufträge mit kürzeren Intervallen als 1 Minute aus. Diese Konfiguration zeigt Ihnen einen einfachen Trick, wie Sie den zeitbasierten Scheduler von Cron nutzen können, um Jobs mit Sekundenintervallen auszuführen. Beginnen wir mit den Grundlagen. Der folgende Cron-Job wird jede Minute ausgeführt:

* * * * * date >> /tmp/cron_test

Der obige Job wird jede Minute ausgeführt und fügt die aktuelle Zeit in eine Datei /tmp/cron_test ein. Nun, das ist einfach! Was aber, wenn wir denselben Job alle 30 Sekunden ausführen wollen? Dazu verwenden wir cron, um zwei exakt gleiche Aufträge zu planen, aber wir verschieben die Ausführung des zweiten Auftrags mit dem Befehl sleep um 30 Sekunden. Zum Beispiel:

* * * * * date >> /tmp/cron_test
* * * * * sleep 30; date >> /tmp/cron_test

3voto

Aditya Gosavi Punkte 59

Ein Shell-Skript schreiben .sh-Datei erstellen

nano alle30Sekunden.sh

und Skript schreiben

#!/bin/bash
For  (( i=1; i <= 2; i++ ))
do
    write Command here
    sleep 30
done

dann cron für dieses Skript einstellen crontab -e

(* * * * * /home/username/every30second.sh)

dieser Cron ruft alle 1 Minute eine .sh-Datei auf und der Befehl in der .sh-Datei wird 2 Mal in 1 Minute ausgeführt

Wenn Sie das Skript für 5 Sekunden ausführen möchten, ersetzen Sie 30 durch 5 und ändern Sie die for-Schleife wie folgt: For (( i=1; i <= 12; i++ ))

Wenn Sie eine beliebige Sekunde auswählen, berechnen Sie 60/ihre Sekunde und schreiben Sie in die For-Schleife

3voto

szaier Punkte 39

Mit Crontab kann ein Job in Minuten/Stunden/Tagen geplant werden, aber nicht in Sekunden. Die Alternative :

Erstellen Sie ein Skript, das alle 30 Sekunden ausgeführt wird:

#!/bin/bash
# 30sec.sh

for COUNT in `seq 29` ; do
  cp /application/tmp/* /home/test
  sleep 30
done

Utilice crontab -e und eine crontab zur Ausführung dieses Skripts:

* * * * * /home/test/30sec.sh > /dev/null

3voto

Nguyen Nguyen Punkte 41

Sie können das Skript als Dienst ausführen und alle 30 Sekunden neu starten

Einen Dienst registrieren

sudo vim /etc/systemd/system/YOUR_SERVICE_NAME.service

Fügen Sie den folgenden Befehl ein

Description=GIVE_YOUR_SERVICE_A_DESCRIPTION

Wants=network.target
After=syslog.target network-online.target

[Service]
Type=simple
ExecStart=YOUR_COMMAND_HERE
Restart=always
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

Nachladedienste

sudo systemctl daemon-reload

Aktivieren Sie den Dienst

sudo systemctl enable YOUR_SERVICE_NAME

Starten Sie den Dienst

sudo systemctl start YOUR_SERVICE_NAME

Prüfen Sie den Status Ihres Dienstes

systemctl status YOUR_SERVICE_NAME

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X