Wie erstelle ich mit Bash automatisch einen Cron-Job ohne den interaktiven Editor?
395
Hat crontab ein Argument zum Erstellen von Cron-Jobs ohne Verwendung des Editors (crontab -e)? Wenn ja, wie würde der Code einen Cronjob aus einem Bash-Skript erstellen?
Leider zeigen die meisten Top-Antworten hier nur, wie man Crontab modifiziert - wenn auch auf einigermaßen sichere Weise -, aber ich denke, es ist insgesamt der falsche Ansatz. Besser, sicherer und einfacher ist es, eine Datei in {{cron.d}} abzulegen, und es gibt (derzeit) Antworten mit niedrigen Stimmen, die erklären, wie das geht, wenn Sie weiter nach unten schauen.
Gregmac
Antworten:
539
Sie können der Crontab wie folgt hinzufügen:
#write out current crontab
crontab -l > mycron
#echo new cron into cron file
echo "00 09 * * 1-5 echo hello">> mycron
#install new cron file
crontab mycron
rm mycron
Erklärung der Cron-Linie
*****"command to be executed"-----|||||||||-----Day of week (0-7)(Sunday=0 or 7)|||-------Month(1-12)||---------Day of month (1-31)|-----------Hour(0-23)-------------Minute(0-59)
Ich würde vorschlagen , dass sich ändern ;mit &&als sicherer Schutz vor dem Fall , wenn crontab -lfehlschlägt. (crontab -l && echo "0 0 0 0 0 some entry") | crontab -
Also
12
@MacUsers, crontab -lschlägt fehl, wenn keine Crontab vorhanden ist. Daher &&macht es die Verwendung des Skripts unmöglich, den ersten Eintrag zur Crontab hinzuzufügen.
JPhi1618
312
Möglicherweise können Sie dies im laufenden Betrieb tun
crontab -llistet die aktuellen Crontab-Jobs auf, catdruckt sie aus, echodruckt den neuen Befehl und crontab -fügt alle gedruckten Inhalte der Crontab-Datei hinzu. Sie können den Effekt sehen, indem Sie eine neue machen crontab -l.
Danke, könnten Sie die Syntax erklären oder auf eine URL verweisen, die sie erklärt?
Websites
9
crontab -llistet die aktuellen Crontab-Jobs auf, catdruckt sie aus, echodruckt den neuen Befehl und crontab -fügt alle gedruckten Inhalte der Crontab-Datei hinzu. Sie können den Effekt sehen, indem Sie ein neuescrontab -l
nha
3
Arbeitet ein Vergnügen für mich. Wenn der Benutzer keine Crontab hat, sehen Sie no crontab for <username>, aber es funktioniert trotzdem.
Diese kürzere Datei erfordert keine temporäre Datei, ist immun gegen mehrfache Einfügungen und ermöglicht das Ändern des Zeitplans eines vorhandenen Eintrags.
So entfernen Sie es aus der Crontab, unabhängig vom aktuellen Zeitplan:
( crontab -l | grep -v -F "$croncmd")| crontab -
Anmerkungen:
grep -F stimmt buchstäblich mit der Zeichenfolge überein, da wir sie nicht als regulären Ausdruck interpretieren möchten
Wir ignorieren auch die Zeitplanung und suchen nur nach dem Befehl. Diesen Weg; Der Zeitplan kann geändert werden, ohne dass das Risiko besteht, der Crontab eine neue Zeile hinzuzufügen
@moeseth: Ich habe es offensichtlich auf meinem Computer (Linux) versucht. Ich würde keine zufälligen nicht funktionierenden Sachen vorschlagen: /
MoonCactus
2
Übrigens können 27 Menschen (bis heute) nicht falsch liegen. Beschreiben Sie daher bitte, warum es für Ihr Setup nicht funktioniert, damit wir Ihnen helfen können.
MoonCactus
2
Möglicherweise liegt ein OSX-Problem vor.
Moeseth
40
Vielen Dank an alle für Ihre Hilfe. Ich habe zusammengesetzt, was ich hier und anderswo gefunden habe:
Ich konnte nicht herausfinden, wie ich die Notwendigkeit für die beiden Variablen beseitigen konnte, ohne mich zu wiederholen.
commandist offensichtlich der Befehl, den ich planen möchte. jobnimmt $commanddie Planungsdaten und fügt sie hinzu. Ich brauchte beide Variablen separat in der Codezeile, die die Arbeit erledigt.
Einzelheiten
Dank duckyflip verwende ich dieses kleine Redirect-Ding ( <(*command*)), um die Ausgabe von crontab -lin eine Eingabe für den fgrepBefehl umzuwandeln .
fgrepfiltert dann alle Übereinstimmungen von $command( -vOption) heraus, wobei die Groß- und Kleinschreibung nicht berücksichtigt wird ( -iOption).
Wieder wird das kleine Redirect-Ding ( <(*command*)) verwendet, um das Ergebnis wieder in eine Eingabe für den catBefehl umzuwandeln .
Der catBefehl erhält auch echo "$job"(selbsterklärend) wiederum durch Verwendung des Redirect-Dings ( <(*command*)).
Die gefilterte Ausgabe von crontab -lund die einfache echo "$job", kombinierte Ausgabe werden weitergeleitet ('|'), crontab -um schließlich geschrieben zu werden.
Und wenn sie nicht gestorben sind, leben sie noch heute!
In einer Nussschale:
Diese Codezeile filtert alle Cron-Jobs heraus, die dem Befehl entsprechen, und schreibt dann die verbleibenden Cron-Jobs mit dem neuen aus, wobei sie sich effektiv wie eine "Hinzufügen" - oder "Aktualisieren" -Funktion verhält. Um dies zu verwenden, müssen Sie lediglich die Werte für die Variablen commandund jobaustauschen.
Der Vorteil dieses Ansatzes besteht darin, dass Sie ihn mehrmals ausführen können, ohne sich um doppelte Einträge in der Crontab sorgen zu müssen (im Gegensatz zu allen anderen Lösungen). Das liegt amfgrep -v
Aleemb
5
Wenn Sie die traditionelle Art der Verrohrung von links nach rechts bevorzugen, ersetzen Sie die letzte Zeile durch: crontab -l | fgrep -i -v "$command" | { cat; echo "$job"; } | crontab -l
Antoine Lizée
1
@ AntoineLizée, du antwortest hat am Ende extra "l", was nicht da sein sollte.
@ TheBonsai oh ich verstehe, ich habe es jetzt behoben, so dass es den neuen Befehl an den vorhandenen Crontab-Inhalt
anhängen sollte
3
Denken Sie daran, dass die Prozessersetzung von Bash Fehler verschluckt. Wenn dies crontab -lfehlschlägt, aber crontab -erfolgreich ist, ist Ihre Crontab ein Einzeiler.
20.
13
Es gab viele gute Antworten bezüglich der Verwendung von Crontab, aber keine Erwähnung einer einfacheren Methode, wie z. B. der Verwendung cron.
Unter Verwendung cronwürde sich die Vorteile von Systemdateien und Verzeichnisse nehmen /etc/crontab, /etc/cron.daily,weekly,hourlyoder /etc/cron.d/:
In diesem obigen Beispiel haben wir eine Datei in erstellt /etc/cron.d/, die Umgebungsvariablen für die erfolgreiche Ausführung des Befehls bereitgestellt und die userfür den Befehl und das commandselbst bereitgestellt . Diese Datei sollte nicht ausführbar sein und der Name sollte nur alphanumerische Zeichen und Bindestriche enthalten (weitere Details siehe unten).
Um eine gründliche Antwort zu geben, schauen wir uns die Unterschiede zwischen crontabvs an cron/crond:
crontab -- maintain tables for driving cron for individual users
Für diejenigen, die den Job im Kontext ihres Benutzers auf dem System ausführen möchten, crontabkann die Verwendung durchaus sinnvoll sein.
cron -- daemon to execute scheduled commands
Für diejenigen, die Konfigurationsmanagement verwenden oder Jobs für andere Benutzer verwalten möchten. In diesem Fall sollten wir verwenden cron.
Ein kurzer Auszug aus den Manpages gibt Ihnen einige Beispiele dafür, was zu tun ist und was nicht:
/ etc / crontab und die Dateien in /etc/cron.d müssen Eigentum von root sein und dürfen nicht gruppen- oder anderweitig beschreibbar sein. Im Gegensatz zum Spool-Bereich können die Dateien unter /etc/cron.d oder die Dateien unter /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly und /etc/cron.monthly ebenfalls vorhanden sein Symlinks, vorausgesetzt, sowohl der Symlink als auch die Datei, auf die er verweist, gehören root. Die Dateien unter /etc/cron.d müssen nicht ausführbar sein, während die Dateien unter /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly und /etc/cron.monthly dies tun Sie werden von Laufteilen ausgeführt (weitere Informationen finden Sie unter Laufteile (8)).
Ich sh: 1: Syntax error: "(" unexpectedbenutze immer noch sh .
Batandwa
Dies funktioniert nur, wenn Sie BASH verwenden. Mir ist die korrekte DASH (sh) -Syntax nicht bekannt. Die Antwort wurde ebenfalls aktualisiert
kvz
1
fwiw, ich bekomme diesen Fehler mit bash, wenn zwischen <und ein Leerzeichen steht (. Das bedeutet , dass es < (fehlschlägt, aber <(funktioniert, es sei denn, Ihr Zeitplan enthält Sternchen ...
Doublesharp
Ich glaube, das ist der richtige Weg:cat <(crontab -l |grep -v "${CRON}") <(echo "${CRON}") | crontab -
Stanislav
5
Für eine schöne schnelle und schmutzige Erstellung / Ersetzung einer Crontab aus einem BASH-Skript habe ich diese Notation verwendet:
Wenn Sie Vixie Cron verwenden, z. B. auf den meisten Linux-Distributionen, können Sie einfach eine Datei mit dem einzelnen Cronjob in /etc/cron.d ablegen.
Dies funktioniert natürlich nur für root. Wenn Ihr System dies unterstützt, sollten Sie dort mehrere Beispiele sehen. (Beachten Sie den in der Zeile enthaltenen Benutzernamen in derselben Syntax wie die alte / etc / crontab.)
Es ist eine traurige Fehlfunktion in cron, dass es keine Möglichkeit gibt, dies als normaler Benutzer zu handhaben, und dass so viele cron-Implementierungen überhaupt keine Möglichkeit haben, damit umzugehen.
sudo - weil Sie erhöhte Berechtigungen benötigen, um cron-Konfigurationen im Verzeichnis / etc zu ändern
Echo - ein Fahrzeug, um eine Ausgabe auf Standardausgang zu erzeugen. printf, cat ... würde auch funktionieren
"- Verwenden Sie ein doppeltes Anführungszeichen am Anfang Ihrer Zeichenfolge, Sie sind ein Profi
0,15,30,45 * * * * - der Standard-Cron-Laufplan, der alle 15 Minuten ausgeführt wird
ntpdate -u time.nist.gov - der eigentliche Befehl, den ich ausführen möchte
"- weil meine ersten doppelten Anführungszeichen einen Kumpel benötigen, um die ausgegebene Zeile zu schließen
>> - Die doppelte Umleitung wird angehängt anstatt überschrieben *
/etc/cron.d/vmclocksync - vmclocksync ist der Dateiname, den ich ausgewählt habe. Er befindet sich in /etc/cron.d/
* Wenn wir die> Umleitung verwenden, können wir garantieren, dass wir nur einen Aufgabeneintrag haben. Es besteht jedoch die Gefahr, dass andere Regeln in einer vorhandenen Datei weggeblasen werden. Sie können selbst entscheiden, ob eine mögliche Zerstörung mit> richtig ist oder ob mögliche Duplikate mit >> für Sie sind. Alternativ können Sie etwas Verworrenes oder Beteiligtes tun, um zu überprüfen, ob der Dateiname vorhanden ist, ob etwas darin enthalten ist und ob Sie ein Duplikat hinzufügen - aber ich habe etwas zu tun und kann das nicht tun Sie jetzt.
Bash-Skript zum Hinzufügen von Cron-Jobs ohne den interaktiven Editor. Der folgende Code hilft beim Hinzufügen eines Cronjobs mithilfe von Linux-Dateien.
#!/bin/bash
cron_path=/var/spool/cron/crontabs/root
#cron job to run every 10 min.
echo "*/10 * * * * command to be executed">> $cron_path
#cron job to run every 1 hour.
echo "0 */1 * * * command to be executed">> $cron_path
Ich weiß, es war eine lange Zeit, aber dies ist immer noch die einzig gute Antwort, da alle am meisten gewählten die alten Cron entfernen, anstatt nur die neue anzuhängen.
Afe
1
Dieser installiert keinen Cron. Es wird nur an eine Datei angehängt. Sie müssen den Cron-Prozess irgendwie benachrichtigen, um den neuen Eintrag zu installieren.
Apoorv Parijat
1
Hier ist eine Bash-Funktion zum Hinzufügen eines Befehls crontabohne Duplizierung
function addtocrontab (){local frequency=$1
local command=$2
local job="$frequency $command"
cat <(fgrep -i -v "$command"<(crontab -l))<(echo "$job")| crontab -}
addtocrontab "0 0 1 * *""echo hello"
Fügen Sie den Parameter -w hinzu, um den genauen Befehl grep zu erhalten, ohne dass der Parameter -w den Cronjob "testing" hinzufügt, wodurch der Cron-Job "testing123" gelöscht wird.
Skriptfunktion zum Hinzufügen / Entfernen von Cronjobs. Keine doppelten Einträge:
Dadurch wird sichergestellt, dass Sie die leere neue Zeile unten korrekt behandeln. Um Probleme mit crontab zu vermeiden, sollten Sie die crontab-Datei normalerweise mit einer leeren neuen Zeile beenden. Und das obige Skript stellt sicher, dass zuerst alle Leerzeilen mit dem "grep" entfernt werden. Teil, und fügen Sie dann am Ende eine neue leere Zeile mit dem "\ n" am Ende des Skripts hinzu. Dadurch wird auch verhindert, dass über Ihrem neuen Befehl eine Leerzeile angezeigt wird, wenn Ihre vorhandene Crontab-Datei mit einer Leerzeile endet.
Antworten:
Sie können der Crontab wie folgt hinzufügen:
Erklärung der Cron-Linie
Quelle nixCraft .
quelle
(crontab -l ; echo "00 09 * * 1-5 echo hello") | crontab -
- einfacher zu kopieren Edos Antwort;
mit&&
als sicherer Schutz vor dem Fall , wenncrontab -l
fehlschlägt.(crontab -l && echo "0 0 0 0 0 some entry") | crontab -
crontab -l
schlägt fehl, wenn keine Crontab vorhanden ist. Daher&&
macht es die Verwendung des Skripts unmöglich, den ersten Eintrag zur Crontab hinzuzufügen.Möglicherweise können Sie dies im laufenden Betrieb tun
crontab -l
listet die aktuellen Crontab-Jobs auf,cat
druckt sie aus,echo
druckt den neuen Befehl undcrontab -
fügt alle gedruckten Inhalte der Crontab-Datei hinzu. Sie können den Effekt sehen, indem Sie eine neue machencrontab -l
.quelle
crontab -l
listet die aktuellen Crontab-Jobs auf,cat
druckt sie aus,echo
druckt den neuen Befehl undcrontab -
fügt alle gedruckten Inhalte der Crontab-Datei hinzu. Sie können den Effekt sehen, indem Sie ein neuescrontab -l
no crontab for <username>
, aber es funktioniert trotzdem.(crontab -l ; echo "00 09 * * 1-5 echo hello") | crontab -
.Diese kürzere Datei erfordert keine temporäre Datei, ist immun gegen mehrfache Einfügungen und ermöglicht das Ändern des Zeitplans eines vorhandenen Eintrags.
Angenommen, Sie haben diese:
So fügen Sie es der Crontab ohne Duplizierung hinzu:
So entfernen Sie es aus der Crontab, unabhängig vom aktuellen Zeitplan:
Anmerkungen:
quelle
Vielen Dank an alle für Ihre Hilfe. Ich habe zusammengesetzt, was ich hier und anderswo gefunden habe:
Der Code
Ich konnte nicht herausfinden, wie ich die Notwendigkeit für die beiden Variablen beseitigen konnte, ohne mich zu wiederholen.
command
ist offensichtlich der Befehl, den ich planen möchte.job
nimmt$command
die Planungsdaten und fügt sie hinzu. Ich brauchte beide Variablen separat in der Codezeile, die die Arbeit erledigt.Einzelheiten
<(*command*)
), um die Ausgabe voncrontab -l
in eine Eingabe für denfgrep
Befehl umzuwandeln .fgrep
filtert dann alle Übereinstimmungen von$command
(-v
Option) heraus, wobei die Groß- und Kleinschreibung nicht berücksichtigt wird (-i
Option).<(*command*)
) verwendet, um das Ergebnis wieder in eine Eingabe für dencat
Befehl umzuwandeln .cat
Befehl erhält auchecho "$job"
(selbsterklärend) wiederum durch Verwendung des Redirect-Dings (<(*command*)
).crontab -l
und die einfacheecho "$job"
, kombinierte Ausgabe werden weitergeleitet ('|'),crontab -
um schließlich geschrieben zu werden.In einer Nussschale:
Diese Codezeile filtert alle Cron-Jobs heraus, die dem Befehl entsprechen, und schreibt dann die verbleibenden Cron-Jobs mit dem neuen aus, wobei sie sich effektiv wie eine "Hinzufügen" - oder "Aktualisieren" -Funktion verhält. Um dies zu verwenden, müssen Sie lediglich die Werte für die Variablen
command
undjob
austauschen.quelle
fgrep -v
crontab -l | fgrep -i -v "$command" | { cat; echo "$job"; } | crontab -l
EDIT (festes Überschreiben):
quelle
crontab -l
fehlschlägt, abercrontab -
erfolgreich ist, ist Ihre Crontab ein Einzeiler.Es gab viele gute Antworten bezüglich der Verwendung von Crontab, aber keine Erwähnung einer einfacheren Methode, wie z. B. der Verwendung
cron
.Unter Verwendung
cron
würde sich die Vorteile von Systemdateien und Verzeichnisse nehmen/etc/crontab
,/etc/cron.daily,weekly,hourly
oder/etc/cron.d/
:In diesem obigen Beispiel haben wir eine Datei in erstellt
/etc/cron.d/
, die Umgebungsvariablen für die erfolgreiche Ausführung des Befehls bereitgestellt und dieuser
für den Befehl und dascommand
selbst bereitgestellt . Diese Datei sollte nicht ausführbar sein und der Name sollte nur alphanumerische Zeichen und Bindestriche enthalten (weitere Details siehe unten).Um eine gründliche Antwort zu geben, schauen wir uns die Unterschiede zwischen
crontab
vs ancron/crond
:Für diejenigen, die den Job im Kontext ihres Benutzers auf dem System ausführen möchten,
crontab
kann die Verwendung durchaus sinnvoll sein.Für diejenigen, die Konfigurationsmanagement verwenden oder Jobs für andere Benutzer verwalten möchten. In diesem Fall sollten wir verwenden
cron
.Ein kurzer Auszug aus den Manpages gibt Ihnen einige Beispiele dafür, was zu tun ist und was nicht:
Das Verwalten von Cron auf diese Weise ist aus Systemsicht einfacher und skalierbarer, ist jedoch nicht immer die beste Lösung.
quelle
<job>
keine Dateierweiterung enthalten sein sollte.Möglicherweise automatisieren Sie dies und möchten nicht, dass ein einzelner Job zweimal hinzugefügt wird. In diesem Fall verwenden Sie:
Dies funktioniert nur, wenn Sie BASH verwenden. Mir ist die korrekte DASH (
sh
) -Syntax nicht bekannt .Update: Dies funktioniert nicht, wenn der Benutzer noch keine Crontab hat. Ein zuverlässigerer Weg wäre:
Wenn Ihre Distribution dies unterstützt, können Sie alternativ auch eine separate Datei verwenden:
Fand diese in einer anderen SO-Frage .
quelle
sh: 1: Syntax error: "(" unexpected
benutze immer noch sh .<
und ein Leerzeichen steht(
. Das bedeutet , dass es< (
fehlschlägt, aber<(
funktioniert, es sei denn, Ihr Zeitplan enthält Sternchen ...cat <(crontab -l |grep -v "${CRON}") <(echo "${CRON}") | crontab -
Für eine schöne schnelle und schmutzige Erstellung / Ersetzung einer Crontab aus einem BASH-Skript habe ich diese Notation verwendet:
quelle
Eine Variante, die crontab nur bearbeitet, wenn dort die gewünschte Zeichenfolge nicht gefunden wird:
quelle
Wenn Sie Vixie Cron verwenden, z. B. auf den meisten Linux-Distributionen, können Sie einfach eine Datei mit dem einzelnen Cronjob in /etc/cron.d ablegen.
Dies funktioniert natürlich nur für root. Wenn Ihr System dies unterstützt, sollten Sie dort mehrere Beispiele sehen. (Beachten Sie den in der Zeile enthaltenen Benutzernamen in derselben Syntax wie die alte / etc / crontab.)
Es ist eine traurige Fehlfunktion in cron, dass es keine Möglichkeit gibt, dies als normaler Benutzer zu handhaben, und dass so viele cron-Implementierungen überhaupt keine Möglichkeit haben, damit umzugehen.
quelle
Also, in Debian, Ubuntu und vielen ähnlichen Debian-basierten Distributionen ...
Es gibt einen Verkettungsmechanismus für Cron-Tasks, der eine Konfigurationsdatei aufnimmt, bündelt und zu Ihrem laufenden Cron-Dienst hinzufügt.
Sie können eine Datei unter /etc/cron.d/somefilename ablegen, wobei somefilename beliebig ist.
Lassen Sie uns dies zerlegen:
sudo - weil Sie erhöhte Berechtigungen benötigen, um cron-Konfigurationen im Verzeichnis / etc zu ändern
Echo - ein Fahrzeug, um eine Ausgabe auf Standardausgang zu erzeugen. printf, cat ... würde auch funktionieren
"- Verwenden Sie ein doppeltes Anführungszeichen am Anfang Ihrer Zeichenfolge, Sie sind ein Profi
0,15,30,45 * * * * - der Standard-Cron-Laufplan, der alle 15 Minuten ausgeführt wird
ntpdate -u time.nist.gov - der eigentliche Befehl, den ich ausführen möchte
"- weil meine ersten doppelten Anführungszeichen einen Kumpel benötigen, um die ausgegebene Zeile zu schließen
>> - Die doppelte Umleitung wird angehängt anstatt überschrieben *
/etc/cron.d/vmclocksync - vmclocksync ist der Dateiname, den ich ausgewählt habe. Er befindet sich in /etc/cron.d/
* Wenn wir die> Umleitung verwenden, können wir garantieren, dass wir nur einen Aufgabeneintrag haben. Es besteht jedoch die Gefahr, dass andere Regeln in einer vorhandenen Datei weggeblasen werden. Sie können selbst entscheiden, ob eine mögliche Zerstörung mit> richtig ist oder ob mögliche Duplikate mit >> für Sie sind. Alternativ können Sie etwas Verworrenes oder Beteiligtes tun, um zu überprüfen, ob der Dateiname vorhanden ist, ob etwas darin enthalten ist und ob Sie ein Duplikat hinzufügen - aber ich habe etwas zu tun und kann das nicht tun Sie jetzt.
quelle
Bash-Skript zum Hinzufügen von Cron-Jobs ohne den interaktiven Editor. Der folgende Code hilft beim Hinzufügen eines Cronjobs mithilfe von Linux-Dateien.
quelle
Hier ist eine Bash-Funktion zum Hinzufügen eines Befehls
crontab
ohne Duplizierungquelle
Fügen Sie den Parameter -w hinzu, um den genauen Befehl grep zu erhalten, ohne dass der Parameter -w den Cronjob "testing" hinzufügt, wodurch der Cron-Job "testing123" gelöscht wird.
Skriptfunktion zum Hinzufügen / Entfernen von Cronjobs. Keine doppelten Einträge:
geprüft :
quelle
Meine bevorzugte Lösung hierfür wäre:
Dadurch wird sichergestellt, dass Sie die leere neue Zeile unten korrekt behandeln. Um Probleme mit crontab zu vermeiden, sollten Sie die crontab-Datei normalerweise mit einer leeren neuen Zeile beenden. Und das obige Skript stellt sicher, dass zuerst alle Leerzeilen mit dem "grep" entfernt werden. Teil, und fügen Sie dann am Ende eine neue leere Zeile mit dem "\ n" am Ende des Skripts hinzu. Dadurch wird auch verhindert, dass über Ihrem neuen Befehl eine Leerzeile angezeigt wird, wenn Ihre vorhandene Crontab-Datei mit einer Leerzeile endet.
quelle
quelle
Nein, in crontab gibt es keine Option zum Ändern der Cron-Dateien.
Sie müssen: Nehmen Sie die aktuelle Cron-Datei (crontab -l> newfile), ändern Sie sie und platzieren Sie die neue Datei (crontab newfile).
Wenn Sie mit Perl vertraut sind, können Sie dieses Modul Config :: Crontab verwenden .
LLP, Andrea
quelle
Skriptfunktion zum Hinzufügen von Cronjobs. Überprüfen Sie doppelte Einträge, verwendbare Ausdrücke *> "
geprüft :
Quelle: mein Gehirn;)
quelle
Sie können wahrscheinlich den Standardeditor in ed ändern und einen Heredoc zum Bearbeiten verwenden.
Beachten Sie das führende > in diesem Code bedeutet, dass die Eingabetaste gedrückt wird, um eine neue Zeile zu erstellen.
Die a bedeutet ANHANG, damit nichts überschrieben wird.
Die .bedeutet, dass Sie mit der Bearbeitung fertig sind.
Das w bedeutet SCHREIBEN der Änderungen.
Das q bedeutet BEENDEN oder beenden.
Sie können es überprüfen
Sie können auch einen Eintrag löschen.
Dadurch wird der crontab-Eintrag mit Myscript gelöscht.
Das d bedeutet, das Muster innerhalb des / / zu löschen .
Nein, überprüfe es noch einmal
Diese Lösung funktioniert in einem Skript zu wenig als das > natürlich :-)
quelle