Service unter aktuellem Ubuntu abschalten

Wie schalte ich einen Service unter Ubuntu ab?

Vielleicht findet sich ja hier jemand der sich damit schon näher beschäftigt hat.

Kurz: Habe das Programm mpd (MusicplayerDaemon) installiert und ein upgedatetes Ubuntu 15.04 am start.
Das Programm wird beim Systemstart automatisch mitgestartet und läuft als Daemon unter einem Benutzer der jedenfalls nicht der angemeldete Benutzer ist.
Allerdings möchte ich das Programm unter dem aktuellen User laufen lassen, da die Musik unter ~/Musik liegt und das ganze ziemlich praktisch ist. Um das Programm zu starten muss ich allerdings erst den Daemon stoppen.

Also Programm stoppen mit
[table=“width: 500”]

sudo systemctl stop mpd 
Programm stoppt und startet augenblicklich wieder


sudo systemctl disable mpd
Zeigt keine Auswirkungen*


sudo service mpd stop
Stoppt das Programm**


Löschen von /etc/init.d/mpd
Zeigt keine Auswirkungen*

[/table]

*) Daemon läuft nach dem Neustart wieder.

**) Danach kann ich das Programm als normaler user starten, allerdings möchte ich das nicht bei jedem start machen müssen.

Wenn mir jemand noch einen hinweis geben könnte wie ich das lösen kann, wäre das echt super.

Schon mal hiergeschaut?

bye
TT

Lieber TT,

ich muss Ihnen mitteilen, dass mir das Konzept von Suchmaschinen wohlbekannt ist.

Gerade mit dieser aktuellen Version des Betriebssystems gingen Änderungen einher die das Init-System betreffen.
Die Ergebnisse die zur Zeit zu finden sind, sind noch recht dürftig und führten zu keiner zufriedenstellenden Lösung meines Problems.

$ ps -Al | grep mpd
>4 S   118  1653     1  0  80   0 - 203628 ep_pol ?       00:00:00 mpd

mpd läuft. Laut Taskmanager als root, was ja das eigentliche Problem ist.

$ sudo status mpd
> status: Verbindung zu Upstart nicht möglich: Failed to connect to socket /com/ubuntu/upstart: Verbindungsaufbau abgelehnt

Upstart hat mit der ganzen Sache wohl nichts am Hut.

$ sudo service mpd status
● mpd.service - Music Player Daemon
   Loaded: loaded (/lib/systemd/system/mpd.service; disabled; vendor preset: enabled)
   Active: active (running) since Di 2015-05-12 15:30:23 CEST; 32min ago
 Main PID: 1653 (mpd)
   CGroup: /system.slice/mpd.service
           ├─1653 /usr/bin/mpd --no-daemon
           └─1697 /usr/bin/pulseaudio --start --log-target=syslog

Mai 12 15:30:23 Rechner systemd[1]: Started Music Player Daemon.
Mai 12 15:30:23 Rechner systemd[1]: Starting Music Player Daemon...
Mai 12 15:30:28 Rechner mpd[1653]: May 12 15:30 : config: Failed to stat directory "/var/lib/mpd/music": Per...denied
Mai 12 15:30:28 Rechner pulseaudio[1697]: [pulseaudio] server-lookup.c: Unable to contact D-Bus: org.freedesk...r X11
Mai 12 15:30:28 Rechner pulseaudio[1697]: [pulseaudio] main.c: Unable to contact D-Bus: org.freedesktop.DBus....r X11
Hint: Some lines were ellipsized, use -l to show in full.

Ok, läuft anscheinend mit systemd obwohl disabled. sudo systemctl status mpd zeigt das selbe.

$ sudo systemctl enable mpd
Created symlink from /etc/systemd/system/multi-user.target.wants/mpd.service to /lib/systemd/system/mpd.service.

Erstellt einen Link zum starten, sofern noch nicht vorhanden.

$ sudo systemctl disable mpd
Removed symlink /etc/systemd/system/multi-user.target.wants/mpd.service.

Entfernt den Link wieder, sofern vorhanden.

$ sudo systemctl stop mpd
> Warning: Stopping mpd.service, but it can still be activated by:
>  mpd.socket
$ ps -Al | grep mpd
> 4 S   118 12547     1  0  80   0 - 203628 ep_pol ?       00:00:00 mpd

Stoppen des Services über systemctl und überprüfen ergibt, dass der Prozess wieder gestartet wurde. Ersichtlich aus der neuen Prozess-ID.

$ sudo service mpd stop && ps -Al | grep mpd
> --- nichts ---

Damit funktioniert das stoppen.

$ sudo systemctl status mpd
● mpd.service - Music Player Daemon
   Loaded: loaded (/lib/systemd/system/mpd.service; disabled; vendor preset: enabled)
   Active: inactive (dead) since Di 2015-05-12 16:18:28 CEST; 1min 29s ago
  Process: 12547 ExecStart=/usr/bin/mpd --no-daemon $MPDCONF (code=exited, status=0/SUCCESS)
 Main PID: 12547 (code=exited, status=0/SUCCESS)
... logs ...

Nochmals alles überprüfen und Rechner neu starten.

Service wieder da :frowning:

Wenn ich jetzt noch eine Erklärung bekommen könnte was ich falsch “gegoogelt” habe (man sollte auch beachten, dass Google personalisierte Ergebnisse liefert die von Zeit zu Zeit variieren), dann würde ich mich sogar dazu überwinden auf den Danke-Knopf zu drücken.

von hier:

This should do the trick :

Open terminal (CTRL + ALT + t) and type into

sudo update-rc.d tomcat disable

Basically update-rc.d will modify existing runlevel links for the script /etc/init.d/tomcat by renaming start links to stop links.

Ist natürlich nicht getestet…

bye
TT

$ sudo update-rc.d mpd disable
> update-rc.d: error: cannot find a LSB script for mpd

Will nicht, Eintrag ist zudem von 2011.

Aber nehmen wir also den Vorschlag darunter aus dem Jahre 2013, die Links unter /etc/rc?.d zu löschen.

/etc/init.d/mpd habe ich bereits gelöscht, weshalb die Links ins Leere zeigen.

$ sudo update-rc.d -f mpd remove

Aber dennoch löscht dies eine ganze Latte von Links.

Neustart und siehe da, das Ding wird wieder gestartet.

Dann starte ich auch noch sysv-rc-conf und mpd ist nirgends aufgelistet. Könnte ich also nicht einmal abwählen weil überhaupt nicht vorhanden.

Beim Systemstart gibt es noch keinen “akutellen User”?

https://wiki.ubuntu.com/SystemdForUpstartUsers

Evtl. wird mpd über mpd.socket wieder gestartet. Auch wenn die Quelle sich auf Arch bezieht, sollte folgendes übertragbar sein, da Ubuntu jetzt auch systemd verwendet:

Socket activation

If the mpd.socket unit (provided by mpd) is enabled while mpd.service is disabled, systemd will not start mpd immediately, but it will listen on the appropriate sockets. When an mpd client attempts to connect on one of those sockets, systemd will start mpd.service and transparently hand over control of those ports to the mpd process.

If you prefer to listen on different UNIX sockets or network ports (even multiple sockets of each type), or if you prefer not to listen on network ports at all, edit the mpd.socket unit appropriately and modify /etc/mpd.conf to match the configuration (see man 5 mpd.conf for details).
(https://wiki.archlinux.org/index.php/Music_Player_Daemon)

Generell könntest Du Dir die verlinkte Seite mal anschauen, da gibt es auch ein paar Hinweise, wie Du den Daemon als anderer Benutzer bzw. mit Zugriff auf Deine Musikdateien unterhalb von ~ starten kannst. Sollte wie gesagt zum großen Teil auf Ubuntu übertragbar sein.

Ok, jetzt bin ich um einiges schlauer geworden.

Bei der Installation wird die Datei /lib/systemd/system/mpd.socket angelegt.

[Socket]
ListenStream=/var/run/mpd/socket
ListenStream=6600
Backlog=5
KeepAlive=true
PassCredentials=true

[Install]
WantedBy=sockets.target

Greift nun ein Programm auf diesen Socket zu, dann wird der Service gestartet. Bei mir war das conky, das dafür gesorgt hat, dass der Service gestartet wird.

Also habe ich die beiden roten Zeilen entfernt. Das Ergebnis ist, dass der Service nun nicht mehr gestartet wird, weil er nicht mehr auf den Socket hört.

[OT]Eigentlich ein recht cooles Feature. Angenommen man hat eine lokale Anwendung und erstellt dafür nun eine Weboberfläche zur Bedienung. Dann könnte man einen Socket reservieren der die Anwendung gegebenenfalls startet. Der User bräuchte dann nur einen Link anklicken und im Hintergrund würde ein Webserver gestartet, der die Anwendung bereitstellt.[/OT]

Alternativ hättest Du mpd.socket auch mittels systemctl deaktivieren können.