KShell-Skript überspringt Befehle, wenn es in cron geplant ist

356
Weqaar Mohammed

Ich habe ein Kshell-Skript, das ein Java-Programm ausführt.

/path/to/java -jar jarfile.jar some parameters > log Same line 5 times with different parameters appending output to log file. cat log | mail -s email@email.com 

Das Problem, das ich immer wieder habe, ist, wenn ich dieses Skript in cron schreibe, wird nur die letzte Zeile ausgeführt, in der die Protokolldateien abgelegt und E-Mails gesendet werden. Alle oben genannten, funktional benötigten Zeilen werden ignoriert. Ich erhalte eine leere E-Mail zur geplanten Zeit von cron, aber das Skript sollte ungefähr 1 Stunde dauern.

Aber wenn ich das Skript manuell ausführe, funktioniert es einwandfrei.

0

2 Antworten auf die Frage

1
Weqaar Mohammed

Ich habe die Cron-Mails auf Probleme geprüft. Für "Kein Zugriff auf jarfile.jar" habe ich den vollständigen Pfad im Skript hinzugefügt, und für "cat: 0652-050 Öffnen von / Pfad / in / log" habe ich die Protokolldatei vorab mit dem Befehl "touch" erstellt. Nun sieht mein Skript so aus.

touch /path/to/log /path/to/java -jar /path/to/jarfile.jar some parameters > /path/to/log Same line 5 times with different parameters appending output to log file. cat /path/to/log | mail -s email@email.com 

Ich wusste, dass der Weg zum absoluten Pfad der Schlüssel ist, um diese Art von Problemen zu vermeiden.

0
Gombai Sándor

Es ist das gute alte "Cron mit seiner sehr einfachen Umgebung". Wenn Sie Ihr Skript in Ihrer eigenen Shell ausführen, befinden sich die Prozesse, die Sie starten, in einer Umgebung, die von Ihren Profilen festgelegt wird. Ihre Cron-Jobs beginnen jedoch in einer sehr einfachen Umgebung, in der es nicht viele Variablen und Pfadinformationen gibt. Tatsächlich kann dies erraten werden, indem in den Mail-Cron-Sends nach ihren Läufen oder dem globalen Protokoll des Cron-Daemons gesucht wird.

Wenn Sie ksh verwenden, schlage ich vor, am Anfang des Skripts .kshrc oder .profile zu suchen:

. /home/yourid/.kshrc . /home/yourid/.profile 
Danke, ich werde dies berücksichtigen, aber ich habe das Problem gelöst, indem ich den vollständigen Pfad für die JAR-Datei und das Protokoll angegeben habe. Ich habe das Problem gefunden, indem ich mir die Cron-Mails angesehen habe. Weqaar Mohammed vor 8 Jahren 0