n0cturne
Goto Top

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:
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

Content-ID: 4037261251

Url: https://administrator.de/contentid/4037261251

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

rubberman
rubberman 23.09.2022 aktualisiert um 17:13:54 Uhr
Goto Top
Bin in bash nicht bewandert. Allerdings fehlt am Ende der while Zeile das Semikolon, oder? Keine Ahnung ob das schon des Rätsels Lösung ist ...

Steffen

EDIT Ignore me. Nur wenn das do in derselben Zeile steht.
3803037559
3803037559 23.09.2022 aktualisiert um 17:34:39 Uhr
Goto Top
Da du aber eh nur die Semicolons durch Leerzeichen ersetzt reicht folgendes in deinem Fall aber völlig aus ...
#!/bin/bash
cat /share/CACHEDEV1_DATA/scripts/.certs | tr ";" " " >/share/CACHEDEV1_DATA/scripts/log/test.log  
Cheers
cg
n0cturne
n0cturne 23.09.2022 um 17:23:42 Uhr
Goto Top
Ich hab das Skript hier stark vereinfacht, weil es für die Darstellung des Problems ausreicht. Mit den vier Variablen wird schon ne ganze Menge gemacht.
Mein Ziel ist schon dass jede Zeiles des csv durchiteriert wird und ich pro Iteration die vier Variablen nutzen kann.
Mich wundert halt auch, dass das ohne erhöhte Rechte bestens funktioniert.
3803037559
3803037559 23.09.2022 aktualisiert um 17:32:27 Uhr
Goto Top
Ich würde dafür stattdessen gleich AWK hernehmen
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.
n0cturne
n0cturne 23.09.2022 um 18:04:53 Uhr
Goto Top
Hm, da komm ich jetzt nicht mit.
Die echo Ausgabe habe ich hier nur Exemplarisch reingeschrieben.
Das Ziel der Schleife ist ja schon, dass ein ganzer Stapel an Befehlen mit den Werten für CertDomain CertMail CertFormat und CertApp ausgeführt wird.
Und zwar hintereinander für csv-Zeile 1, 2, 3, usw.
So wie ich deine awk-Zeile verstehe, kann ich damit nicht sonderlich viel mehr machen, als die Variablen in einem durchlauf auszugeben. Aber ich bin auch noch nicht so erfahren bei bash und schon gar nicht bei awk.
108012
108012 23.09.2022 um 19:28:37 Uhr
Goto Top
Hallo,

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 jedenfalls
verstanden 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
n0cturne
n0cturne 26.09.2022 um 19:52:16 Uhr
Goto Top
Habe alle Berechtigungen und Besitzer geprüft und auf einen Stand gebracht.
Nun klappt es auch per sudo, im Terminal.
Per crontab habe ich aber immer noch das komische Verhalten mit der zig-fachen Ausgabe.
Besitzer ist admin:administrators. admin ist bei Qnap gleichbedeutend mit root.
Habe auf alle Files und Folders chmod 774 angewendet.
... und stehe weiterhin auf dem Schlauch. face-sad