Wie starte ich die GUI-Anwendung mit Upstart?

716
goGud

Ich habe drei Tage lang mit diesem Problem zu kämpfen gehabt und habe viele Wege ausprobiert, aber noch nicht erfolgreich. Ich hoffe ihr könnt mir helfen ...

Ich habe eine GUI-Anwendung. Ich möchte diese Anwendung automatisch starten. Und wenn es unerwartet ausfällt oder geschlossen wird, möchte ich diese Anwendung erneut öffnen.

Ich habe versucht, das Upstart-Skript zu verwenden, obwohl die Dienste mit Upstart kein Problem darstellen, wird die GUI-Anwendung nicht mit dem Upstart-Skript gestartet. Es sagt, dass der X-Server nicht verbunden werden kann.

Soll ich einige Einstellungen hinzufügen oder ändern, um sie mit upstart zu öffnen, oder gibt es eine Möglichkeit, die GUI-Anwendung automatisch zu öffnen, wenn ein unerwartetes Beenden oder Herunterfahren auftritt (nicht nur einmal nach dem Anmelden meine ich nicht mit dem Startvorgang)?

Danke für deine nette Unterstützung...

0

1 Antwort auf die Frage

0
a CVn

Sie können eine grafische Anwendung nicht über upstart oder ein anderes init-System starten, da zum Zeitpunkt des Starts X (die grafische Umgebung) noch nicht gestartet ist.

In Windows ist die grafische Umgebung ein wesentlicher Bestandteil des Betriebssystems. Selbst Windows Server Core ist im Herzen grafisch (obwohl Sie nur ein Eingabeaufforderungsfenster sehen). Linux dagegen geht den umgekehrten Weg ein: Das System selbst ist nur textbasiert, und die grafische Umgebung wird von einer darüber ausgeführten Benutzerraumanwendung bereitgestellt.

Leider gibt es keine einfache Möglichkeit, das zu tun, was Sie danach scheinen.

Das heißt, Sie können die Einschränkung umgehen. In vielen Desktop-Umgebungen kann eine Liste von Anwendungen definiert werden, die beim Anmelden gestartet werden (oder genauer gesagt, die Desktop-Umgebung wird gestartet). Sie könnten ein Skript schreiben, das die Anwendung in einer engen Schleife startet und das Programm beendet, wenn die Anwendung mit einem Exit-Status von Null beendet wird (was für das erfolgreiche Beenden ohne Problem normal ist). Ob dies für Sie funktioniert oder nicht, hängt von Ihrer Definition des "unerwarteten Beendigungsprozesses" ab.

Eine naiive-Implementierung könnte etwa so aussehen:

#!/bin/bash while true do my-app || exit Xdialog --timeout 15 --yesno "Program exited. Restart it?" 2 50 test "$?" = "0" -o "$?" = "255" || exit done 

Das ||bedeutet "führt Folgendes aus, wenn der Exit-Status des vorherigen nicht Null war" (es wird "oder" gelesen). In der Xdialog-Dokumentation erfahren Sie, wie das funktioniert. Im Grunde werden Sie gefragt, ob Sie das Programm weiterhin ausführen möchten. Wenn Sie innerhalb von 15 Sekunden mit Ja antworten oder gar nichts beantworten, wird das Programm erneut gestartet, indem Sie die Schleife erneut ausführen. Machen Sie die Skriptdatei zu einer ausführbaren Datei und richten Sie Ihre Desktop-Umgebung beim Starten beim Anmelden aus. Sie my-appwird ausgeführt, bis Sie sie explizit schließen und dem System mitteilen, dass Sie es nicht neu starten möchten.

Ich benutze CentOs, ich habe Ihren Vorschlag ausprobiert, nachdem ich dieses Skript gestartet habe, wenn ich den Prozess der Anwendung abschalte (Skript nicht neu starten!). Es gibt einen Core-Dump-Fehler, und es gibt keinen Dialog zum erneuten Starten. goGud vor 9 Jahren 0