Programm alle x Minuten neu starten?

10

Ich habe ein mutithreaded Java-Programm, das eine OpenSource-Bibliothek verwendet, und diese Bibliothek hat einige Fehler, die einen Deadlock verursachen. Ich habe den Fehler gemeldet, aber es wird einige Zeit dauern, bis er behoben ist. Ich müsste dieses Programm weiterhin verwenden und solange es funktioniert startet alle 2-3 Stunden neu, es wird den Job für mich erledigen. Gibt es eine Möglichkeit, das Programm alle x Minuten neu zu starten?

Arya
quelle
3
Sie könnten ein Skript schreiben, das die Aufgabe alle 2-3 Stunden beendet und neu startet.
GT6989b
Um zu verfolgen, was @ gt6989b ist, würde ich ein Python-Skript schreiben, das einfach eine Schleife durchläuft und wartet, bis 2-3 Stunden vergangen sind, und dann das Programm neu startet. Möglicherweise sind die Module Python- Unterprozess und sh hilfreich.
Durchbruch

Antworten:

12

Sie können versuchen, in Ihrem crontab:

crontab -e

dann

 11 */3 * * * /usr/bin/pkill -f appli_name; /path/to/appli_name & &>/dev/null

Der crontabBefehl bedeutet:

  • alle 3 Stunden
  • töte appli_name
  • Starten Sie appli_name im Hintergrund
Gilles Quenot
quelle
So löse ich derzeit ein ähnliches Problem. Ich starte jede Nacht um 0:00 Uhr eine bestimmte Software über cron neu, da die Software dazu neigt, ihre Statusdatei nach 4-5 Tagen zu beschädigen. Ich habe die Software als Dienst installiert und dann service <appname> restart > /dev/null 2>&1zu den gewünschten Zeiten ausgeführt.
Daniel Andersson
2

Ich empfehle Ihnen, Supervisor für Ihre Aufgabe zu konfigurieren . Es kann den Prozess überwachen, neu starten, wenn er fehlschlägt, bietet auch eine Umleitung der Ausgabe und andere nützliche Funktionen. Im Beispiel finden Sie Informationen zum Starten des Programms .

gertvdijk
quelle
+1, dies scheint eine "sauberere" Lösung zu sein als crontab(obwohl beide Lösungen gut funktionieren). Ich finde jedoch, dass Supervisor besser konfigurieren kann, welche Signale wann gesendet werden SIGTERMsollen (dh wann gesendet werden soll und wie lange vor dem Senden gewartet werden SIGKILLmuss usw.).
Durchbruch