[gelöst] Syntax error bei Ausführung mit cron

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
frankieboy
Beiträge: 355
Registriert: 19.08.2003 15:25:48
Wohnort: Bremen

[gelöst] Syntax error bei Ausführung mit cron

Beitrag von frankieboy » 07.06.2013 12:02:27

Hallo Forum

wenn ich ein Shell-Script direkt in der Konsole aufrufe, läuft es problemlos durch ;-)

Richtig sinnvoll ist das Script aber nur, wenn es regelmäßig via Cron ausgeführt wird. Leider wird in diesem Fall ein "Syntax error" bemängelt ;-(

Code: Alles auswählen

/var/www/office/shell/test3.sh: 39: /var/www/office/shell/test3.sh: Syntax error: redirection unexpected
die betreffende Zeile 39 des Scriptes sieht so aus:

Code: Alles auswählen

mysql -u $benutzer -p$passwort -h $host $datenbank <<<"SELECT Artikel_Nr from Meyer_Lagerabfrage ORDER BY Artikel_Nr DESC LIMIT $start,110" | tail -n +2 | hole_xml_datei $1
Was läuft hier falsch? Wie bereits erwähnt, läuft das Script bei Konsolen-Aufruf problemlos durch.
Debian Bookworm mit xfce-Desktop

Benutzeravatar
Meillo
Moderator
Beiträge: 9239
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Syntax error bei Ausführung mit cron

Beitrag von Meillo » 07.06.2013 12:23:55

Cron fuehrt die Scripte mit einer Bourne-kompatiblen Shell (/bin/sh) aus. Die Umleitung mit ``<<<'' wird von dieser nicht unterstuetzt. Du musst dein Script portabel machen oder es explizit mit einer Shell aufrufen die diese Art von Umleitung unterstuetzt.

Portabel geht's so:

Code: Alles auswählen

mysql -u $benutzer -p$passwort -h $host $datenbank <<EOF | tail -n +2 | hole_xml_datei $1
SELECT Artikel_Nr from Meyer_Lagerabfrage ORDER BY Artikel_Nr DESC LIMIT $start,110
EOF
bzw.

Code: Alles auswählen

echo "SELECT Artikel_Nr from Meyer_Lagerabfrage ORDER BY Artikel_Nr DESC LIMIT $start,110" | mysql -u $benutzer -p$passwort -h $host $datenbank | tail -n +2 | hole_xml_datei $1
Use ed once in a while!

frankieboy
Beiträge: 355
Registriert: 19.08.2003 15:25:48
Wohnort: Bremen

[Erldedigt] Syntax error bei Ausführung mit cron

Beitrag von frankieboy » 07.06.2013 12:53:50

Das Problem hat sich mit wenigen Änderungen erledigt:

Crontab vorher:
34 12 * * 5 /var/www/office/shell/test3.sh
Die Einfügung "bash" vor der Pfad/Datei-Angabe hat es (teilweise) gebracht ;-)

Crontab hinterher:
34 12 * * 5 bash /var/www/office/shell/test3.sh
Außerdem ist es erforderlich gewesen, sämtliche Dateiangaben im Script mit dem vollständigen Pfad (ab root) zu versehen.

Jetzt läuft das Script auch zeitgesteuert unter cron ;-)
Debian Bookworm mit xfce-Desktop

Benutzeravatar
Meillo
Moderator
Beiträge: 9239
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: [gelöst] Syntax error bei Ausführung mit cron

Beitrag von Meillo » 07.06.2013 14:41:28

Sehr schoen.
Use ed once in a while!

frankieboy
Beiträge: 355
Registriert: 19.08.2003 15:25:48
Wohnort: Bremen

Re: Syntax error bei Ausführung mit cron

Beitrag von frankieboy » 11.06.2013 13:13:10

Vielen Dank für deinen Lösungsvorschlag. Da eine selbst gefundene Lösung sich mit deinem Posting überschnitten hat, habe ich deinen Vorschlag nicht näher ausprobiert. Ich bin mir aber sicher, er funktioniert. ;-) Danke nochmal.



Meillo hat geschrieben:Cron fuehrt die Scripte mit einer Bourne-kompatiblen Shell (/bin/sh) aus. Die Umleitung mit ``<<<'' wird von dieser nicht unterstuetzt. Du musst dein Script portabel machen oder es explizit mit einer Shell aufrufen die diese Art von Umleitung unterstuetzt.

Portabel geht's so:

Code: Alles auswählen

mysql -u $benutzer -p$passwort -h $host $datenbank <<EOF | tail -n +2 | hole_xml_datei $1
SELECT Artikel_Nr from Meyer_Lagerabfrage ORDER BY Artikel_Nr DESC LIMIT $start,110
EOF
bzw.

Code: Alles auswählen

echo "SELECT Artikel_Nr from Meyer_Lagerabfrage ORDER BY Artikel_Nr DESC LIMIT $start,110" | mysql -u $benutzer -p$passwort -h $host $datenbank | tail -n +2 | hole_xml_datei $1
Debian Bookworm mit xfce-Desktop

Antworten