Dies ist das erste Mal, dass ich ein Shell-Skript schreibe und ich habe sehr wenig Informationen in der gegebenen Zeitleiste. Obwohl ich verschiedene Tutorials durchlese, dachte ich mir aber auch, was ich hier möchte.
Ich möchte ein Shell-Skript schreiben, das auf einem beliebigen Computer den Cronjob bearbeitet, ein neues Skript hinzufügt, das alle 15 Minuten ausgeführt wird. also im Grunde muss ich einen Eintrag hinzufügen
0,15,30,45 * * * * /home/personal/scripts/cronSqlprocedure.sh
Was ich im Shell-Skript haben möchte
cronSqlprocedure.sh
Wenn möglich, möchte ich auch cronSqlprocedure über das Shell-Skript schreiben, da es einige Variablen benötigt, die von System zu System variieren können.
%Vor%cronSqlprocedure.sh
konfiguriert werden. Es scheint alles wie routiniertes Shell-Scripting zu sein:
%Vor% Der trap
stuff stellt minimalen Schaden sicher, wenn der Benutzer entscheidet, die temporäre Datei zu unterbrechen und zu bereinigen. Beachten Sie, dass die alte Version des Skripts, falls vorhanden, bereits geplottert wurde. Wenn Sie möchten, können Sie das Skript in eine andere temporäre Datei umwandeln und das Verschieben erst dann abschließen, wenn Sie zufrieden sind. Ich verwende normalerweise die I / O-Umleitung für den Befehl crontab
. Sie können den Dateinamen als Argument übergeben.
Beachten Sie die Escapes auf $ORACLE_HOME
und $PATH
, auf die William Purpell richtig hingewiesen hat, sollte anwesend sein $ORACLE_HOME
und sollte (vielleicht) auf $PATH
vorhanden sein. Sie müssen entscheiden, ob Sie den cron
-provided (total minimal) -Wert von $PATH
(in welchem Fall Sie den umgekehrten Schrägstrich verwenden möchten) oder ob Sie den aktuellen Wert des Benutzers $PATH
in% verwenden wollen. co_de% script. Beide könnten richtig sein - seien Sie sich dessen bewusst und entscheiden Sie sich warum. Beachten Sie, dass die von cron
bereitgestellte Umgebung immer minimal ist. Sie erhalten eine Einstellung für PATH, HOME, vielleicht TZ, wahrscheinlich USER und möglicherweise LOGNAME; das kann alles sein. Wenn Sie sich nicht sicher sind, versuchen Sie einen crontab-Eintrag auszuführen, der die Umgebung in einer Datei erfasst:
Sie werden wahrscheinlich feststellen, dass die Datei klein ist. Vergessen Sie nicht, den Eintrag nach dem Testen zu entfernen.
Eine gute Sache, für die Sie empfohlen werden:
cron
-Eintrag aus und überlässt das Skript der harten Arbeit. Meiner Ansicht nach sollten die Einträge in der crontab
-Datei in der Tat einfach sein und ein speziell dafür entwickeltes Skript aufrufen, um die eigentliche Arbeit zu erledigen.
Bis jetzt kein Problem:
%Vor%Das ist furchtbar wiederholend, und mit append anzufangen ist nicht gut. Ich würde verwenden:
%Vor% Das crontab
wendet die E / A-Umleitung auf die enthaltenen Befehle an. Beachten Sie, dass vor dem { ... }
ein Semikolon oder eine neue Zeile stehen muss.
Da ich eine Variable für den Dateinamen habe, würde ich es verwenden:
%Vor%Dann haben wir ein Problem mit der Wiederholung hier, plus nicht hinter uns selbst aufzuräumen:
%Vor%Also würde ich schreiben:
%Vor% Ich denke immer noch, dass }
nicht zu schwer ist und in jedem Skript verwendet werden sollte, das temporäre Dateien erstellt; Aber es ist dein Chaos, nicht meines. Ich bin nicht davon überzeugt, dass trap
überall gebraucht wird; Ich habe es in einem Namen gelassen und nicht in dem anderen. Wenn Sie keinen Verzeichnispfad angeben, wird $PWD
impliziert. Ich stelle außerdem fest, dass Sie in Ihrem vorgeschlagenen vollständigen Skript einen etwas anderen Skriptnamen als den ursprünglichen verwenden. Solange die Namen selbstkonsistent sind, gibt es kein Problem (und die Verwendung einer Variablen trägt zur Konsistenz bei), aber seien Sie vorsichtig.
Ich bin mir nicht sicher, ob ich das wirklich so machen würde, aber Sie könnten die temporäre Datei auch vermeiden mit:
%Vor% Dadurch wird der aktuelle Wert gesammelt und die zusätzliche Zeile angehängt. Dies wird in ein Skript eingegeben, das für eine Sekunde ruht (um den ersten Teil zu beenden), bevor die Ergebnisse wieder in $PWD
eingegeben werden. Es ist eine Frage, wie zuverlässig die Verzögerung von einer Sekunde ist, hauptsächlich. Es ist wahrscheinlich gut, aber nicht garantiert. Die temporäre Datei ist 100% zuverlässig - ich würde sie verwenden, weil sie nicht komplexer ist. (Ich könnte runde Klammern um das erste Paar von Befehlen verwenden; ich könnte Klammern um das zweite Paar von Befehlen verwenden, aber ich müsste ein Semikolon zwischen crontab
und -
hinzufügen, das durch% co_de ersetzt wird %.)
Beachten Sie, dass mein ursprünglicher Vorschlag sorgfältig darauf geachtet hat, dass selbst wenn das Skript mehrere Male ausgeführt wurde, nur ein Eintrag in der Crontab-Datei für den Prozess vorhanden ist. Ihre Varianten stellen die Idempotenz nicht sicher.
Ich habe eine ähnliche Frage gefunden: Crontab programmgesteuert bearbeiten und erzwingen Der Daemon zum Aktualisieren
Das Ändern der Berechtigungen der Datei ist ein typisches Shell-Skript mit vielen verfügbaren Ressourcen.
Für den Cronjob sollten Sie im Wesentlichen mit dem Crontab-Programm interagieren und es mit einer völlig neuen Cron-Datei füttern. Sie können zuerst bereits konfigurierte Cron-Jobs abrufen, Ihre zu der Liste hinzufügen und dann crontab erneut aufrufen, um ihr die neue Eingabedatei zu geben.
Weitere Informationen finden Sie auf der Manpage für crontab .