Linux Skript Problem bei automatischer Ausführung
Hallo,
ich habe vermutlich Tomaten auf den Augen.
Ein Skript soll Bilder von Überwachungskameras aussoriteren nach Hoch/Querformat.
Das Skript funktioniert auf der Konsole einwandfrei, jedoch sobald es mit crontab gestartet wird, wird die if-Bedingung für Hochkant nie wahr.
Ich komm einfach nicht drauf....
System ist Ubuntu Server 16.04LTS auf der bash.
identify überprüft die Orientierung, bei Drehung 6 (also Hochkant) soll es in einen anderen Ordner verschoben werden.
$f ist die Datei (in ner Schleife)
$POS und $NEG sind Verzeichnisse. Mit crontab wird nur noch der negative Zweig durchlaufen, die Bedingung wird nie positiv.
Das Skript ist beim crontab desselben Users eingetragen, so dass ich unterschiedliche Umgebungen eigentlich ausschließe:
Ideen? Danke!
ich habe vermutlich Tomaten auf den Augen.
Ein Skript soll Bilder von Überwachungskameras aussoriteren nach Hoch/Querformat.
Das Skript funktioniert auf der Konsole einwandfrei, jedoch sobald es mit crontab gestartet wird, wird die if-Bedingung für Hochkant nie wahr.
Ich komm einfach nicht drauf....
System ist Ubuntu Server 16.04LTS auf der bash.
identify überprüft die Orientierung, bei Drehung 6 (also Hochkant) soll es in einen anderen Ordner verschoben werden.
$f ist die Datei (in ner Schleife)
$POS und $NEG sind Verzeichnisse. Mit crontab wird nur noch der negative Zweig durchlaufen, die Bedingung wird nie positiv.
Das Skript ist beim crontab desselben Users eingetragen, so dass ich unterschiedliche Umgebungen eigentlich ausschließe:
ERG=$(identify -verbose $f | grep "exif:Orientation")
if [[ $ERG == *"Orientation: 6"* ]]; then
mv $f $POS
# echo "positiv"
else
mv $f $NEG
# echo "-"
fi
Ideen? Danke!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 385639
Url: https://administrator.de/contentid/385639
Ausgedruckt am: 05.11.2024 um 23:11 Uhr
17 Kommentare
Neuester Kommentar
Was sollen denn die Sternchen? Poste doch bitte mal wie das Log genau aussieht, dann kann ich dir vielleicht eine zuverlässige Methode nennen.
Bash ist bei Strings nicht so unkompliziert wie man denken würde. Solche String-Prüfungen würde ich von daher mit grep machen.
Beispiel:
Bash ist bei Strings nicht so unkompliziert wie man denken würde. Solche String-Prüfungen würde ich von daher mit grep machen.
Beispiel:
if echo "$ERG" | grep -qE ".*Orientation: 6.*"; then
echo "Hochkant"
else
echo "Quer"
fi
Weil deine default-Shell die bash ist und dein Skript vom Cron mit einer anderen Shell gestartet wird (ich gehe von SH aus), da sieht das dann so aus:
Schau mal in die Mails vom root oder ins syslog, da wird der Cron sicher gemeckert haben.
~$ ME=mu
~$ [[ $ME == "mu" ]] && echo yes
sh: 2: [[: not found
Schau mal in die Mails vom root oder ins syslog, da wird der Cron sicher gemeckert haben.
Zitat von @receiverbox:
Also lieber doch mit "/bin/bash /home/user/skript.sh" im crontab arbeiten?? Wäre quasi die einfacher Lösung dann gewesen?
Also lieber doch mit "/bin/bash /home/user/skript.sh" im crontab arbeiten?? Wäre quasi die einfacher Lösung dann gewesen?
Einfach ein
#!/bin/bash
Dann "weiß" das System, daß Deine Skripten mit der bash laufen müssen.
lks
PS: "shebang" ist das Stichwort zum googlen, wenn Du mehr dazu wissen willst.
@receiverbox: Das was @Lochkartenstanzer erwähnt: 1. Erste Zeile vom Skript #!/bin/bash
2. chmod +x /pfad/zum/skript.sh
3. In der Crontab keine Shell explizit angeben sondern nurnoch den Skriptnamen als aufzurufndes Programm angeben
2. chmod +x /pfad/zum/skript.sh
3. In der Crontab keine Shell explizit angeben sondern nurnoch den Skriptnamen als aufzurufndes Programm angeben