script für cron.täglich
Muss ich mein Java-Programm läuft auf einem linux-Rechner einmal am Tag. So habe ich eine einfache Datei mit nur einer Zeile:
java -jar /opt/location/my_jar.jar
und steckte es in die/etc /cron.täglich, vorausgesetzt, es würde einmal am Tag ausgeführt. Aber es läuft nicht bei allen. Ich habe versucht beide zu haben .sh-Erweiterung, oder einfach nur den Namen der Datei ohne Erweiterung. Noch, kein Glück.
Ich es gegoogelt und ich bin immer ziemlich viel widersprüchliche info. Kann mir bitte jemand helfen?
EDIT:
Ich bin fasst der Ort, wo es jetzt ist, basiert auf den Antworten von Satish und Mithrandir.
1.Ich habe die run_conversions script mit vi, um über das problem mit dem Ende der Zeile-Zeichen unter windows. Das Skript wird jetzt
#!/bin/sh
/usr/bin/java -jar /opt/location/my_jar.jar
2.Ich habe es in /etc/cron.von Stunde zu Stunde.
3.Die überprüfung der log unter /var/log/cron, die ich bin zu sehen das es ab run_conversions und finishing run_conversions jede Stunde. So weit So gut.
4.Aber es scheint nicht, wie meine jar-Datei ausgeführt wird. Ich weiß das, weil, wenn es richtig läuft, sollte es aktualisieren einer Datenbank, und die Datenbank wird nicht aktualisiert.
5.Hier ist die merkwürdige Sache: bei mir läuft cron.stündlich manuell, aber das aufrufen
run-parts /etc/cron.hourly
die jar-Datei ist der hit propertly, und die Datenbank aktualisieren.
Um es zusammenzufassen: wenn Sie es durch run-parts, es funktioniert. Beim verlassen es stündlich von selbst, gibt es nicht.
Irgendwelche Ideen?
EDIT 2:
Folgenden Rat von Satish, Mithrandir und vahid änderte ich meine run_conversions_loc wie folgt Aussehen:
#!/bin/bash
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bexport SHELL=/bin/bash
/usr/bin/java -jar /opt/tf/conversions/aff_networks2.jar > /opt/tf/conversions/runconversions.txt
Ich entfernt das Skript von cron.stündlich und ergänzt diese Zeile in die crontab:
*/10 * * * * /opt/tf/conversions/run_conversions_loc
Das script jetzt läuft alle 10 Minuten und ist eingetragen in das cron-log wie diesen:
Feb 24 09:30:01 backsome CROND[7933]: (root) CMD (/opt/tf/conversions/run_conversions_loc)
Bisher sieht es gut aus. Aber die Datenbank, die Sie aktualisieren sollten -- nicht mehr aktualisiert.
Suchen, tiefer in es, die jar-Datei, aff_networks2.jar auf der Suche nach einem ftr.properties
Datei in das lokale Verzeichnis -- das gleiche Verzeichnis, wo es langgeht. Die Datei existiert in diesem Verzeichnis. Es ist aber nicht richtig gelesen. Ich weiß das, weil in der Ausgabe-Datei, runconversions.txt der Wert, der gelesen werden soll, aus der Datei mit den Eigenschaften null ist.
Zwei Dinge, um das Bild zu vervollständigen:
-
Alles, was im Umbauten-Verzeichnis hat 777 Berechtigungen. Ich weiß, es wird nicht empfohlen, um solche erweiterten Berechtigungen, aber ich wollte sicherstellen, dass (wenigstens zu versuchen) es ist nicht das Problem.
-
Wenn ich das Skript aus der shell durch Aufruf
./run_conversions_loc
es läuft, findet die properties-Datei und die Datenbank aktualisiert. Ich bin eingeloggt als root auf der shell, und ich habe auch alle relevanten Dateien, die als root installiert und als root die Zeile für den Aufruf des Skript in die crontab.
Irgendwelche Ideen, warum nicht cron Auslesen der properties-Datei?
- haben Sie überprüfen Sie /var/log/cron ?
- Danke für den Tipp, Satish. Ich habe es jetzt und mein Skript erwähnt ist nicht da, obwohl jetzt habe ich es sowohl in der cron.daily und cron.stündlich, und folgte Mithrandir folgenden Ratschläge. Keine Ahnung, was Los ist???
- Muss ich einen "Installation" von meinem script, wenn ich mich fallenlassen es in der cron.daily oder cron.stündlich?
- erstellen Sie ein shell-Skript wie @Mithrandir sagte, und führen Sie den cron manuell auf Befehl wie: run-parts /etc/cron.täglich und überprüfen Sie Ihre log
- Danke, Satish. Ich Tat was Sie sagte und ich bin mit cron.stündlich manuell und immer diese Fehlermeldung: Unable to access (jar-Datei) /opt/location/myjar2.jar. Die Datei existiert dort, und execute-Berechtigungen für Besitzer und Gruppe. Ich bin als root angemeldet. Warum nicht laufen?
- hast du das ausführen-Befehl manuell auf der Kommandozeile?
- Ja, habe ich. Etwas seltsames passiert. Ich habe auch versucht, führen Sie das Skript direkt aus dem Ort, wo es-und die jar-Dateien-sind auf, und ich bin immer ein Nicht auf (jar-Datei) myjar2.jar. Die Sache ist die, es funktionierte gestern bei mir läuft es wie folgt. Sieht aus wie ich bin in ein totales Chaos.
- Hinzufügen eine weitere Sache: wenn ich den Zugriff auf die jar-Datei direkt von der Kommandozeile java-jar myjar2.jar alles funktioniert einwandfrei.
- Und ich denke, eine Sache noch: wenn ich das hinzufügen dieser Zeile #!/bin/sh, damit das Skript sieht aus wie Mithrandir ist unten, ich bin immer ein "/bin/sh^M: bad interpreter: No such file or directory" - Fehler. Wenn ich entfernen Sie die Zeile, ich bin immer "Unable to access (jar-Datei) myjar2.jar" Fehler.
- Zum Abschluss der info: wenn ich laufen run-parts /etc/cron.täglich wie Satish empfohlen den cron läuft mein script, und es zeigt in der log, und die jar Datei ist nicht zugänglich-wie ich ausführlich in den Kommentaren oben.
- was ist Ihr Betriebssystem? und shell verwenden? versuchen #!/bin/bash eine weitere Sache, die auch die Verwendung der vollständigen Pfad anstelle von java. verwenden Sie /usr/bin/java-überall dort, wo Ihre java gelegen.
- Gleichen Fehler mit #!/bin/bash: /bin/bash^M: bad interpreter: No such file or directory. Ich geändert vollständigen Pfad für java, /usr/bin/java, aber kein Glück. Das OS ist eine linux durch rackspace.
- Ah! habe es Ihr editor-Problem, versuchen Sie es mit diesem Befehl: dos2unix scriptname.sh überprüfen Sie auch weitere Details hier stackoverflow.com/questions/2920416/...
- Überprüfen Sie meine komplette Antwort!!! in den Antwort-Abschnitt
Du musst angemeldet sein, um einen Kommentar abzugeben.
seine wahrscheinlich Ihre Umgebungsvariablen
funktioniert es wie der aktuelle Benutzer eingeloggt ist, wenn das Skript ausgeführt wird ?
wenn so
run:
dann nehmen Sie die Ausgabe und stellen Sie es auf die oben in Ihrem Skript, und versuchen Sie einen anderen cron-in 2 Minuten ab jetzt, um zu sehen, ob es geklappt hat
Aktualisierte Antwort in der Antwort zu Eddy ' s Kommentar 24th Feb 2013.
Möchte ich Ihnen einen crash-Kurs auf crontab.
Ich sehe, Sie versuchen, zu versuchen, einen Lauf je 10 Minuten, was in Ordnung ist in /etc/crontab
Der Grund, warum ich vorgeschlagen, wodurch das gesamte class-Pfad der aktuellen shell ist, weil die meisten der Zeit, die das Skript versucht, einen unix-Befehl, der nicht als Teil der crontab den PFAD (die sich direkt an der Spitze der Datei /etc/crontab selbst)
Debuggen Pfad Probleme seine in der Regel eine gute Idee zu beobachten, die mailbox der Benutzer, die crontab ausgeführt wird die Aufgabe als :
also tail -100 /var/spool/mail/root und auf der Suche nach irgendwelchen Nachrichten zu, die cron-task als auch die cron-logs selbst als jemand vorgeschlagen hat -
Ich glaube nicht das dein problem ist Wege hier, wenn..
Sie versuchen zum ausführen einer java jar-Datei und es kann sein, dass Ihre jar-Datei noch andere Dateien im konvertierungsordner und dass, wenn Sie ausführen, es, sind Sie bereits in diesem Ordner....
so, in Ihrem Skript, das Sie ausführen könnte
Aber da ist so ein kleines Skript, das Sie bekommen konnte, Weg mit der Platzierung das ganze als cron-Eintrag und umgehen ein shell-Skript, insgesamt so etwas wie dieses
Hoffe, das hilft, dieses Problem zu lösen
Lösung mit Beispiel:
Run-Befehl manuell auf der Kommandozeile:
Erstellen lassen, die ein Skript in /
etc/cron.daily/test.sh
und geben Sie die execute-Berechtigung:Hinweise: laufen
dos2unix
in Fall müssen Sie die dos-Zeichen-Problem oder einen Fehler/bin/bash^M: bad interpreter: No such file or directory
Testen, voila!!
Ändern Sie Ihre Datei an:
Prüfen, ob
/usr/bin/java
ist eigentlich, wo der Befehl ist installiert (which java
).Ändern Sie die Rechte der Datei auf ausführbar: