While-Schleife per crontab läuft viel zu oft
Hallo zusammen
ich bin mit meinem Qnap x86 NAS gerade am Verzweifeln.
Ich habe ein Script geschrieben, welches meine Zertifikate managen soll.
Basis dafür ist ein csv-Fie, wo die Zertifikate mit ein paar Parametern aufgelistet sind.
Führe ich das Skript im Terminal aus, läuft alles wie gewünscht.
Richte ich es hingegen als Cronjob ein, wird jede Aktion innerhalb der while-Schleife zig mal ausgeführt.
Hier ein paar Auszüge aus Skript, Input und Output. Ich hab das mal etwas zusammengedampft, da selbst mit diesem simplen Skript dieser Murks passiert.
crontab:
Skript: cert_update.sh:
Input: .certs:
Output: test.log:
Ich bin völlig ratlos, da meiner Erwartung nach der echo-Befehl für genau jede Zeile 1x ausgeführt werden müsste.
Hat jemand eine Idee?
*edit: Mir ist gerade noch in den Sinn gekommen, es mal mit und mal ohne sudo, per Terminal zu versuchen. Das scheint zumindest Teil das Problems zu sein.
Ohne sudo wie gewünscht, mit sudo wie oben beschrieben. Hat mich jetzt aber auch nicht weitergebracht, da das Skript auf jeden Fall mit root-Rechten ausgeführt werden muss.
Beste Grüße
ich bin mit meinem Qnap x86 NAS gerade am Verzweifeln.
Ich habe ein Script geschrieben, welches meine Zertifikate managen soll.
Basis dafür ist ein csv-Fie, wo die Zertifikate mit ein paar Parametern aufgelistet sind.
Führe ich das Skript im Terminal aus, läuft alles wie gewünscht.
Richte ich es hingegen als Cronjob ein, wird jede Aktion innerhalb der while-Schleife zig mal ausgeführt.
Hier ein paar Auszüge aus Skript, Input und Output. Ich hab das mal etwas zusammengedampft, da selbst mit diesem simplen Skript dieser Murks passiert.
crontab:
21 16 * * * /bin/bash /share/CACHEDEV1_DATA/scripts/cert_update.sh
Skript: cert_update.sh:
#!/bin/bash
OLDIFS=$IFS
IFS=';'
while read CertDomain CertMail CertFormat CertApp
do
echo $CertDomain $CertMail $CertFormat $CertApp >> /share/CACHEDEV1_DATA/scripts/log/test.log
done < /share/CACHEDEV1_DATA/scripts/.certs
IFS=$OLDIFS
exit
Input: .certs:
domain;email;format;app
domain1.de;hostmaster@domain1.de;pem;qts
domain2.de;hostmaster@domain2.de;pkcs12;vw
domain3.de;hostmaster@domain3.de;cer;cd
#eol
Output: test.log:
domain email format app
domain1.de hostmaster@domain1.de pem qts
domain2.de hostmaster@domain2.de pkcs12 vw
domain3.de hostmaster@domain3.de cer cd
domain email format app
domain1.de hostmaster@domain1.de pem qts
domain2.de hostmaster@domain2.de pkcs12 vw
domain3.de hostmaster@domain3.de cer cd
domain email format app
domain1.de hostmaster@domain1.de pem qts
domain2.de hostmaster@domain2.de pkcs12 vw
domain3.de hostmaster@domain3.de cer cd
domain email format app
domain1.de hostmaster@domain1.de pem qts
domain2.de hostmaster@domain2.de pkcs12 vw
domain3.de hostmaster@domain3.de cer cd
domain email format app
domain1.de hostmaster@domain1.de pem qts
domain2.de hostmaster@domain2.de pkcs12 vw
domain3.de hostmaster@domain3.de cer cd
domain email format app
domain1.de hostmaster@domain1.de pem qts
domain2.de hostmaster@domain2.de pkcs12 vw
domain3.de hostmaster@domain3.de cer cd
domain email format app
domain1.de hostmaster@domain1.de pem qts
domain2.de hostmaster@domain2.de pkcs12 vw
domain3.de hostmaster@domain3.de cer cd
domain email format app
domain1.de hostmaster@domain1.de pem qts
domain2.de hostmaster@domain2.de pkcs12 vw
domain3.de hostmaster@domain3.de cer cd
Ich bin völlig ratlos, da meiner Erwartung nach der echo-Befehl für genau jede Zeile 1x ausgeführt werden müsste.
Hat jemand eine Idee?
*edit: Mir ist gerade noch in den Sinn gekommen, es mal mit und mal ohne sudo, per Terminal zu versuchen. Das scheint zumindest Teil das Problems zu sein.
Ohne sudo wie gewünscht, mit sudo wie oben beschrieben. Hat mich jetzt aber auch nicht weitergebracht, da das Skript auf jeden Fall mit root-Rechten ausgeführt werden muss.
Beste Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4037261251
Url: https://administrator.de/contentid/4037261251
Ausgedruckt am: 22.11.2024 um 03:11 Uhr
7 Kommentare
Neuester Kommentar
Da du aber eh nur die Semicolons durch Leerzeichen ersetzt reicht folgendes in deinem Fall aber völlig aus ...
Cheers
cg
#!/bin/bash
cat /share/CACHEDEV1_DATA/scripts/.certs | tr ";" " " >/share/CACHEDEV1_DATA/scripts/log/test.log
cg
Ich würde dafür stattdessen gleich AWK hernehmen
Nur zur Info du nutzt ">>" als Redirector, also bleibt immer alles was vor dem Ausführen im File drin war auch erhalten, wenn du es also mehrfach ausführst wird am Ende auch immer mehrfach drin stehen, wenn du das File nicht vorher löschst.
awk -F ";" '{print $1" "$2" "$3" "$4}' /share/CACHEDEV1_DATA/scripts/.certs
Nur zur Info du nutzt ">>" als Redirector, also bleibt immer alles was vor dem Ausführen im File drin war auch erhalten, wenn du es also mehrfach ausführst wird am Ende auch immer mehrfach drin stehen, wenn du das File nicht vorher löschst.
Hallo,
verstanden und dann ist da noch die Aufgabe die mittels Cronjob erledigt wird, da wird es mittels
eines von denen wird wohl hier zur Anwendung kommen müssen. Wo genau liegt denn das Script im
Benutzer-Ordner? Und dann soll Cron das Script regelmäßig ausführen, richtig? Und die CVS Datei,
wem gehört die genau? Und wo liegt die genau!?
Dobby
Mich wundert halt auch, dass das ohne erhöhte Rechte bestens funktioniert.
Das wäre mein Tipp gewesen, denn wenn Du das Script manuell ausführst läuft es, so habe ich das jedenfallsverstanden und dann ist da noch die Aufgabe die mittels Cronjob erledigt wird, da wird es mittels
- chmod
- chown
- chgrp
- chattr
eines von denen wird wohl hier zur Anwendung kommen müssen. Wo genau liegt denn das Script im
Benutzer-Ordner? Und dann soll Cron das Script regelmäßig ausführen, richtig? Und die CVS Datei,
wem gehört die genau? Und wo liegt die genau!?
Dobby