2016-07-01 12 views
2

Wir versuchen erfolglos, einen Java-Befehl in dem folgenden Shell-Skript auszuführen:Einfacher Java-Befehl nicht ausgeführt in Cron

#!/bin/bash 
/usr/java/jdk1.8.0_91/bin/java -jar /home/cyberren/cyberren/cyberexe/D50_1_Migration.jar > d50Migration.log 

Wir nennen es mit der folgenden Zeile in unserer cron-Datei:

45 08 * * * /home/cyberren/queries/d50migration.sh 

Wir haben bestätigt, dass das Shell-Skript über cron läuft, aber es führt das Java nicht aus. Es wird versucht, aber unsere Protokollausgabe ist nur diese eine Zeile:

2016-Jun-30 08:58:11 - D50_1_Migration Process v104 

Wir erwarten, dass nach vielen mehr Zeilen wie diese:

2016-Jun-30 08:58:11 - D50_1_Migration Process v104 
2016-Jun-30 08:58:11 - migrateData -> SQL: UPDATE D50_1 SET xassessment = 192, iStepsTotal = 9 WHERE xIndx = 128 
2016-Jun-30 08:58:11 - migrateData -> SQL: UPDATE D50_1 SET xassessment = 192, iStepsTotal = 9 WHERE xIndx = 129 
... 

Wir können den gleichen Shell-Skript manuell ausführen, und es Führt das Java aus. Wir können die Java-Zeile auch manuell ausführen und sie wird korrekt ausgeführt.

So zu wiederholen:

  • Der Job läuft geplant
  • Der Shell-Skript läuft
  • Das Protokoll erstellt wird, sondern nur mit der Anfangszeile
  • Die Java-Linie in der Schale Skript läuft nicht
  • Sowohl das Shell-Skript als auch die eigenständige Java-Zeile werden manuell erfolgreich ausgeführt
  • Wir haben alle Directo bestätigt ries referenziert

Vielen Dank im Voraus für die Gedanken und Ratschläge.

Updates/Zusätzliche Informationen:

  • (Edit) Berechtigungen sind korrekt
  • (Edit) Versucht ein voraus cd "$(dirname "$0")" Linie pro Alex Rat hinzufügen. Gleiche Ausgabe.

Lösung:

  • @Jackson, werden Sie wahrscheinlich Zugriff auf den Quellcode nicht für die JAR-Datei haben, so würde das Debuggen fruchtlos sein. Versuchen Sie, den Cron-Job so einzurichten, dass er von einer Bash-Anmeldung aufgerufen wird und die STDERR-Ausgabe an STDOUT sendet und beide in einer Datei protokolliert. Dies sollte es tun, 45 08 * * * /bin/bash -l -c "cd /home/cyberren/queries; ./d50migration.sh 2&>1 |tee -a /home/cyberren/d50migration.log" Auf diese Weise sollten Sie alle ausgegebenen und ausgegebenen Fehler anzeigen) - Finbarr O'Brien vor 22 Minuten
  • Zuerst waren wir ziemlich glücklich, einen Weg zu haben, unsere Fehler zu sehen, aber Ihre Cron-Linie führte erfolgreich das .jar! Sie haben unser Problem gelöst und uns eine Möglichkeit gegeben, Java-Archivdateien erfolgreich über Cron zu planen und auszuführen.
+1

Hallo! Sie können versuchen, Moden-Debug-Zeilen in Ihrem Jar hinzuzufügen, um zu sehen, wo es Bugs gibt –

+0

@ Jägermeister Berechtigungen sind gut! Wir haben mit dem gleichen Benutzer über PuTTY bestätigt. – Jackson

+0

@ Jérèm Ist es sinnvoll, dass es bei der Ausführung über Cron einen Fehler verursacht, aber nicht, wenn es manuell ausgeführt wird? – Jackson

Antwort

0

Versuchen Sie, den Cron-Job einrichten, so dass es aus einem Bash Login aufgerufen wird, und sendet STDERR Ausgabe an STDOUT und Protokolle sowohl in einer Datei, dies sollte es tun:

45 08 * * * /bin/bash -l -c "cd /home/cyberren/queries; ./d50migration.sh 2&>1 |tee -a /home/cyberren/d50migration.log" 

auf diese Weise sollten Sie Sehen Sie sich alle ausgegebenen und ausgegebenen Fehler an (falls vorhanden)

+0

Danke nochmal! Einen erschwerenden Freitag zu einem schönen Start in das Urlaubswochenende gemacht – Jackson