Kann ich Cron "zufällig" machen?


12

Vielleicht bin ich total verrückt, und wenn ja - das ist in Ordnung. Aber wie würde ich einen Job planen, um nach dem Zufallsprinzip eine doofe Nachricht zu senden, wie von fortune?

Klarstellung
ja - das ist meine persönliche Workstation - ich habe nicht vor, auf einem Produktionsserver etwas Wonky zu machen :)

Antworten:


12

athat eine einfachere Schnittstelle für diesen Zweck, wenn atinstalliert ist, der Computer ausgeführt wird atdund der Benutzer den Befehl verwenden darf.

Zum Beispiel (überprüfen Sie die genaue Syntax mit man atoder info at),

at -f Datei now + 53 minutes

oder

at -f Datei now + 2 hours

führt die Befehle in der angegebenen Datei in 53 Minuten bzw. 2 Stunden aus.

at kann dann zu Beginn des geplanten Jobs mit geeigneten (zufälligen oder anderweitigen) Start-, Zähl- und Zeiteinheiten erneut ausgeführt werden.

Bearbeiten

Wie Arjan weiter unten hilfreich hervorhebt, müssen Sie, wenn Sie dies für eine andere als eine Spielzeuganwendung verwenden, über Probleme nachdenken, wie z. B. was passiert

  1. Wenn der nächste Lauf beginnt, bevor der vorherige beendet ist (z. B. wird das Skript erneut eingegeben?) oder

  2. wenn ein Lauf nicht korrekt abgeschlossen werden kann oder

  3. wenn der nächste Lauf überhaupt nicht oder nicht rechtzeitig startet (z. B. was passiert, wenn die Maschine ausgeschaltet ist, wenn der nächste Lauf starten soll) und

  4. Informationen zur Protokollierung und Meldung fehlgeschlagener oder erfolgreicher Läufe.


Das ist ein Ansatz, den ich nicht in Betracht gezogen hatte - und der rekursiv gemacht werden könnte, wenn er fileden nächsten atLauf enthält , richtig?
Warren

großartig - habe es gerade ausprobiert und funktioniert großartig :)
warren

2
+1, aber ein paar Dinge zu beachten: Wenn der atBefehl -command die erste Zeile ist und das Skript lange ausgeführt wird (oder wenn die Intervalle kurz sind), achten Sie darauf, dass mehrere Instanzen gleichzeitig ausgeführt werden. Wenn atsich das Skript jedoch in der letzten Zeile des Skripts befindet, wird offensichtlich keine Neuplanung durchgeführt, wenn das Skript fehlschlägt. Wenn Sie das Skript über die Befehlszeile ausführen, wird es auch selbst (neu) geplant (und: Es können dann mehrere Zeitpläne gleichzeitig vorhanden sein). Und cronunterstützt das Senden von Fehlern (oder: Ausgabe im Allgemeinen) per E-Mail; Ich weiß nicht, ob ates so etwas auch gibt?
Arjan

@Arjan - ich bin auch nicht besorgt darüber versagen und nicht mir eine E - Mail zu senden .. da (an dieser Stelle) Ich verwende es nur Spaß an meinem Arbeitsplatz zu haben :) ..however - das IST etwas zu denken Wenn dies beispielsweise zu einer zufälligen Überprüfung auf Eindringen erweitert würde
Warren

Dem Skript, das ich mir vorstelle, ist es egal, wie viele Kopien von sich gleichzeitig ausgeführt werden
Warren

13

Ich habe viele Befehle in / etc / crontab, die alle möglichen Dinge tun, und einige benötigen Präzision in Sekunden. Jetzt kann cron eine feinere Auflösung haben und gleichzeitig alle Zeiten sichtbar und zentralisiert halten.

In diesem Beispiel wird eine Webseite zwischen 10 und 50 Sekunden alle 5 Minuten abgerufen und analysiert:

4-59/5 * * * * root (sleep $(($RANDOM\%40+10))) && /etc/munin/plugins/someplugin prefetch

Es muss keine genaue Zeit haben, da sich die Daten langsam bewegen, aber es hilft, die Ausführungszeit von Munin-Knoten so gering wie möglich zu halten, indem nicht auf Webseiten gewartet werden muss. (Das Plugin speichert die Seite 30 Minuten lang zwischen, um unnötige Treffer zu reduzieren, muss jedoch alle 5 Minuten eine Datenbank aktualisieren.)

Beachten Sie, dass \% - cron "\ n" durch% ersetzt - nützlich, um den Mail-Text in einer Zeile zu halten.


Wenn Sie die Webseiten zwischenspeichern, erhalten Sie nicht unbedingt genaue Ladeergebnisse
Warren

1
Ja, ich weiß - "Daten bewegen sich langsam" - das Plugin erhält Wechselkurse von einer Website und ich möchte nicht gebannt werden. (Ich bin kein Händler, aber ich verbringe viel Zeit damit, Munin-Grafiken anzusehen.) Ich habe ein ähnliches Plugin für das lokale Wetter erstellt. Endlose Anwendungen!
Andy Lee Robinson

1
Aha! .. sehr cooler Ansatz :)
Warren

6

Intern cronglaube ich nicht, dass es eine solche Funktion gibt. Ich denke, die beste Lösung wäre, Ihren Befehl in ein Shell-Skript zu platzieren und ein zufälliges sleepIntervall am oberen Rand des Skripts zu platzieren und die $RANDOMVariable zu verwenden. Führen Sie das Skript dann einmal täglich in einem normalen Cron-Job aus.

#!/bin/bash
sleep $(($RANDOM%5))
/path/to/command -param1 -param2

1
sleep () ist fast eine Garantie dafür, dass es vom Dienstanbieter getötet wird. Es sei denn natürlich, er ist der Dienstleister.
Ein Zwerg

1
Ich nahm an, dass es auf seiner eigenen Linux-Maschine war oder so, wenn er jemandem zufällig ein Vermögen präsentiert
John T

Nun, das stimmt.
Ein Zwerg

Warum ist Schlaf eine schlechte Idee?
Ich frage

die Frage @ John T geklärt
warren

6

Dies hängt davon ab, nach welcher Art von Intervall Sie suchen. Nehmen wir jedoch an, Sie möchten, dass das Skript mit einer Wahrscheinlichkeit von 1:30 (einmal alle 30 Minuten) zufällig ausgeführt wird.

  • Erstellen Sie Ihr Cron-Skript für eine Dauer von beispielsweise 10 Minuten. Es wird alle 30 Minuten dreimal ausgelöst.

  • Verwenden Sie im Skript rand als Bedingung für eine if- Anweisung. Sie möchten, dass rand eine Zahl zwischen 0 und 2 zurückgibt. Wenn es 0 ist, führen Sie den Inhalt der if-Anweisung aus.

Im Wesentlichen wird Ihr Skript immer in einem festgelegten Intervall ausgelöst. Führt aber nur den Befehl aus, an dem Sie interessiert sind, zufällig. Ihr Dienstanbieter wird es Ihnen danken.


@ Ein Zwerg - danke auch für diese Idee - dies wäre eine etwas nützlichere Route, wenn ich häufig, aber quasi zufällig nach Eindringlingen usw. suchen wollte
Warren
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.