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.
Hallo! Sie können versuchen, Moden-Debug-Zeilen in Ihrem Jar hinzuzufügen, um zu sehen, wo es Bugs gibt –
@ Jägermeister Berechtigungen sind gut! Wir haben mit dem gleichen Benutzer über PuTTY bestätigt. – Jackson
@ 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