Schreiben Sie ein shell-script zu installieren cron-job
Dies ist das erste mal, dass ich Schreibe ein shell-Skript, und ich habe sehr wenig Informationen in der gegebenen Zeitleiste ein. Ich bin zwar mit dem Lesen durch verschiedene tutorials, aber ich dachte, zu Fragen, was ich will, auch hier.
Ich will schreiben Sie ein shell-Skript, das auf jeder Maschine, Bearbeiten Sie die cron-Job, fügen Sie ein neues Skript ausgeführt werden alle 15 Minuten. also im Grunde habe ich um einen Eintrag hinzuzufügen
0,15,30,45 * * * * /home/personal/scripts/cronSqlprocedure.sh
Was will ich in dem shell-script
- würde es zunächst ändern Sie die Berechtigungen/Rechte Ausführung für
cronSqlprocedure.sh
- Bearbeiten bestehenden cron-job, und fügen Sie diesen neuen Eintrag in es.
Wenn möglich, würde ich gerne schreiben cronSqlprocedure durch das shell-Skript auch, da es erfordert einige Variablen, die möglicherweise varry von system zu system.
export ORACLE_HOME=/opt/app/oracle/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=HEER
Diese Zeilen konfiguriert werden, für jede Maschine in der cronSqlprocedure.sh
.
#!/bin/bash
ORACLE_HOME="/opt/app/oracle/product/11.2.0/dbhome_1"
ORACLE_SID="HEER"
ORACLE_USER="USER1"
ORACLE_PASSWORD="USERPASS"
echo "export ORACLE_HOME=$ORACLE_HOME" >> $PWD/sqlcronprocedure.sh
echo "export PATH=\$ORACLE_HOME/bin:\$PATH" >> $PWD/sqlcronprocedure.sh
echo "export ORACLE_SID=$ORACLE_SID" >> $PWD/sqlcronprocedure.sh
echo "rTmpDir=/tmp" >> $PWD/sqlcronprocedure.sh
echo "sqlplus -s $ORACLE_USER@$ORACLE_SID/$ORACLE_PASSWORD > $rTmpDir/deleteme.txt 2>&1 <<EOF" >> $PWD/sqlcronprocedure.sh
echo " select 1 from dual;" >> $PWD/sqlcronprocedure.sh
echo " execute another_script(1000,14);" >> $PWD/sqlcronprocedure.sh
echo "EOF" >> $PWD/sqlcronprocedure.sh
chmod 755 $PWD/sqlcronprocedure.sh
crontab -l > $PWD/sqlcorn.sh
echo "0,15,30,45 * * * * $PWD/sqlcronprocedure.sh" >> $PWD/sqlcorn.sh
crontab $PWD/sqlcorn.sh
- Seien Sie vorsichtig mit
crontab -l
- bei einigen Versionen von crontab wird auch eine Bemerkung wie "BEARBEITEN Sie DIESE DATEI NICHT". Sie könnten in der Lage sein, um Ihre crontab /etc/cron.d statt auf diesen Plattformen. - Kann Sie sein spezifischer über eine version von
crontab -l
fügt hinzu, dass die 'Bearbeiten Sie diese Datei nicht' Einschränkung? Es scheint sinnlos; der Zweck dercrontab
- Befehl ist es, Sie zum Bearbeiten der Einträge in der Datei. Sicher, Sie haben zu füttern, um eine bearbeitete Datei wieder incrontab
, aber ...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfache Antwort auf die Ursprüngliche Frage
Es scheint alles wie routine, shell-scripting:
Den
trap
Zeug sorgt für minimale Schäden, falls der Benutzer beschließt, Sie zu unterbrechen, Aufräumen der temporären Datei. Beachten Sie, dass die alte version des Skriptes, falls vorhanden, bereits verändern. Wenn Sie wollten, könnten Sie arrangieren, um das Skript zu erstellen und in ein anderes temp-Datei, und nur die Oberfläche die sich bewegen, wenn Ihr zufrieden. Ich in der Regel verwenden Sie-I/O-Umleitung auf diecrontab
Befehl; Sie können sehr gut, liefern den Namen der Datei als argument.Hinweis: der entkommt auf
\$ORACLE_HOME
und\$PATH
dass William Pursell richtig feststellte, sollte auf\$ORACLE_HOME
und soll (vielleicht) auf\$PATH
. Sie müssen entscheiden, ob Sie möchten, nehmen Sie diecron
-zur Verfügung gestellt (ganz minimal) Wert$PATH
(in dem Fall, dass Sie wollen, dass der backslash) oder ob Sie möchten, dass der user den aktuellen Wert des$PATH
imcron
Skript. Entweder könnte richtig sein - nur bewusst sein, was Sie wählen und warum. Denken Sie daran, die Umwelt durchcron
ist immer minimal; Sie erhalten eine Einstellung für den PFAD, HAUSE, vielleicht, TZ, wahrscheinlich BENUTZER und möglicherweise LOGNAME; das kann alles sein. Wenn Sie nicht sicher sind, versuchen Sie es mit einem crontab-Eintrag erfasst die Umgebung in eine Datei:Du bist wahrscheinlich zu finden, dass die Datei klein ist. Vergessen Sie nicht, entfernen Sie den Eintrag nach dem Test.
Eine gute Sache, dass Sie gelobt werden für:
crontab
Eintritt, verlassen das Skript zu tun die harte Arbeit.Meiner Ansicht nach, die Einträge in der
crontab
Datei sollte zwar einfach sein mag, die Berufung auf ein speziell angefertigtes Skript zu tun, die eigentliche Arbeit.Kritik der Vorgeschlagenen Skript in der Überarbeiteten Frage
So weit, kein problem:
Dies ist schrecklich eintönig, und anfangen mit den Anhängen ist nicht gut. Würde ich verwenden:
Den
{ ... }
gelten die I/O-Umleitung auf der beiliegenden Befehle. Beachten Sie, dass es muss ein Semikolon oder eine neue Zeile vor der}
.Da ich eine variable für den Namen der Datei, ich würde es nutzen:
Dann haben wir ein problem mit der Wiederholung hier, plus nicht Aufräumen hinter uns:
Also ich würde schreiben:
Ich denke immer noch, dass
trap
ist nicht allzu schwer und sollte verwendet werden, in jedem Skript erstellt temporäre Dateien; jedoch, es ist dein Chaos, nicht von mir. Ich bin nicht davon überzeugt das$PWD
wird überall gebraucht; ich habe es in einem Namen, und nicht in der anderen. Wenn Sie nicht liefern Sie ein Verzeichnis-Pfad, der$PWD
impliziert ist. Ich beachten Sie auch, dass Sie ein etwas anderes Skript name in Ihrer vorgeschlagenen vollständige Skript von der in der ursprünglichen. Solange die Namen sind in sich konsistent ist, gibt es nicht ein problem (und über eine variable hilft, die Konsistenz sicherzustellen), aber seien Sie vorsichtig.Ich bin mir nicht sicher, ich würde es so machen, aber man könnte auch vermeiden, die temporäre Datei verwenden:
Dieser speichert den aktuellen Wert und fügt die zusätzliche Zeile, die Fütterung alle, die in einem Skript, dass Schlaf für eine zweite (für den ersten Teil mal abgeschlossen ist) vor der Fütterung die Ergebnisse wieder in
crontab
. Die Frage ist, wie zuverlässig ist die eine Sekunde Verzögerung, vor allem. Es ist wahrscheinlich in Ordnung, aber nicht garantiert. Die temporäre Datei ist 100% zuverlässig - ich würde es nutzen, denn es ist nicht mehr Komplex. (Ich konnte verwenden Sie Klammern, um die ersten paar Befehle, die ich verwenden könnte, Klammern um das zweite paar der Befehle, aber ich würde hinzufügen müssen Sie ein Semikolon zwischen den-
und die)
wird ersetzt durch}
.)Hinweis, dass mein ursprünglicher Vorschlag war vorsichtig, um sicherzustellen, dass, selbst wenn das Skript ausgeführt wurde, mehrere Male, es würde nur ein Eintrag in der crontab-Datei für den Prozess. Ihre Variante nicht unbedingt von der idempotenz.
Fand ich eine ähnliche Frage: Edit crontab programmgesteuert und Kraft, den Dämon zu aktualisieren
Ändern Sie die Berechtigungen der Datei ist die typische shell-scripting mit vielen Ressourcen zur Verfügung stellen.
Für den cronjob, werden Sie wollen, um im wesentlichen eine Schnittstelle mit dem crontab-Programm und führen Sie es und völlig neuen cron-Datei. Können Sie erst abrufen, die bereits konfiguriert cron-jobs, fügen Sie zu der Liste, und rufen Sie dann die crontab wieder zu geben Sie die neue input-Datei.
Siehe die man-Seite für crontab für weitere Informationen.
Erstellen Sie eine cron.d Datei wie
/etc/cron.d/my-sql-proc
Antwort von @Patrick von unix.stackexchange.com:
Patrick Punkte heraus, es funktioniert möglicherweise nicht auf allen Systemen, aber seine Antwort ist akzeptiert und hat die meisten Stimmen. Es funktioniert gut für mich auf debian 9 (stretch).
Quelle: https://unix.stackexchange.com/questions/117244/installing-crontab-using-bash-script#117254