ubuntuusers.de

LSB-Skript das verschiedene .sh-Dateien ausführg

Status: Ungelöst | Ubuntu-Version: Server 14.10 (Utopic Unicorn)
Antworten |

phil5686

Anmeldungsdatum:
6. September 2014

Beiträge: Zähle...

Hallo,

ich habe ein paar Probleme mit einem init.d Skript. Es soll die einfache Funktion haben, beim Starten Stoppen oder Restarten verschiedene Skripte auszuführen. Es existiert ein start.sh und ein stop.sh.

Mein Skript sieht gerade so aus:

http://paste.ubuntu.com/11935808/

Das funktioniert auch ganz gut, nur als Service lässt es sich nicht verwenden. Könnte mir jemand schnell ein LSB-Skript schreiben, welches beim Starten, Stoppen und Restarten verschiedene sh-skripte ausführt?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

phil5686 schrieb:

Das funktioniert auch ganz gut, nur als Service lässt es sich nicht verwenden.

Was meinst Du damit? Meinst Du vielleicht, dass start.sh blockiert?

phil5686

(Themenstarter)

Anmeldungsdatum:
6. September 2014

Beiträge: 4

Nein, das Skript funktioniert einfach nicht. Die Aktion die ausgeführt wird, wenn man das Skript direkt aufruft funktioniert nicht wenn man es als Service aufruft.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Als Service läuft es mit sudo-Rechten - das sollte aber selten ein Problem sein.

1
cd /home/ogar/ &&sh start.sh &

Das ist ungewöhnlich. Werden da lokale Daten gelesen oder wieso machst Du ein cd, und nicht sh /home/ogar/start.sh ? Hat start.sh keinen Shebang oder ist es nicht als executable markiert, oder wieso rufst Du es explizit mit sh auf? Das ist eine häufige Fehlerquelle.

Was heißt funktioniert nicht ? Woran stellst Du das fest? Gibt es eine Fehlermeldung? Steht was in den Logfiles? Was?

phil5686

(Themenstarter)

Anmeldungsdatum:
6. September 2014

Beiträge: 4

Ja, dort werden Lokale Dateien gelesen, deshalb cd'e ich erstmal in den Ordner und führe dann per sh das Skript aus. Ich weiß, das ist sicher nicht die beste Variante aber es funktioniert.

Das es nicht funktioniert erkenne ich daran dass keine Screen-Session erstellt wird. Die Start.sh beinhaltet folgende Befehle:

screen -S ogar -dmS ogar "nodejs /home/ogar/server/ogar/src/index.js"

Zur Erklärung: Ogar (https://github.com/OgarProject/Ogar) ist ein Privater agar.io Server, den ich auf meinem VServer als Service einrichten möchte.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

phil5686 schrieb:

Ja, dort werden Lokale Dateien gelesen, deshalb cd'e ich erstmal in den Ordner und führe dann per sh das Skript aus. Ich weiß, das ist sicher nicht die beste Variante aber es funktioniert.

Es funktioniert halt gerade nicht, wenn Du das Skript nicht im passenden Verzeichnis ausführst. Das Skript hängt also von Voraussetzungen ab, die es auch selbst herstellen könnte (ein cd innerhalb des Skriptes). Das wäre deutlich robuster.

Das es nicht funktioniert erkenne ich daran dass keine Screen-Session erstellt wird. Die Start.sh beinhaltet folgende Befehle:

screen -S ogar -dmS ogar "nodejs /home/ogar/server/ogar/src/index.js"

Zur Erklärung: Ogar (https://github.com/OgarProject/Ogar) ist ein Privater agar.io Server, den ich auf meinem VServer als Service einrichten möchte.

Hast Du mal als "root" nachgeschaut, ob es eine screen-Session gibt? Wie user unknown: bereits angemerkt hat, wird das Skript beim Systemstart unter einem anderen Benutzer ausgeführt. Du könntest das dadurch reparieren, dass Du dem Aufruf ein sudo -u zieluser voranstellst. Also:

1
cd /home/ogar/ && sudo -u foo sh start.sh

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

phil5686 schrieb:

screen -S ogar -dmS ogar "nodejs /home/ogar/server/ogar/src/index.js"

Ich bin kein screen-User. Ist screen im Pfad, den das init-Script kennt?

Die Frage nach executable-Flag/shebang wolltest Du morgen erst beantworten?

phil5686

(Themenstarter)

Anmeldungsdatum:
6. September 2014

Beiträge: 4

Danke für die Antworten!

Ich hab mein start.sh nun angepasst, so sieht es jetzt aus:

http://paste.ubuntu.com/11940956/

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

phil5686 schrieb:

Danke für die Antworten!

Bitte!

Ich hab mein start.sh nun angepasst, so sieht es jetzt aus:

http://paste.ubuntu.com/11940956/

Aber wieso nutzt Du sudo -u root? Zum einen ist "-u root" hier redundant (das ist sowieso der Standard) und zum anderen ist das ja genau der Benutzer, mit dem das Skript beim Systemstart ausgeführt wird. Für den Fall gewinnst Du also nichts.

Geht es denn nun als Dienst? Und weißt Du, warum es vorher nicht ging?

Antworten |