Warum startet meine systemd-Benutzereinheit nicht beim Booten?


39

Ich versuche, eine systemd-Benutzereinheit zu erstellen und sie beim Systemstart starten zu lassen. Der Dienst wird manuell gestartet, jedoch nicht beim Booten.

Durch die Suche im Internet habe ich erfahren, dass Benutzergeräte beim Booten gestartet werden sollen loginctl enable-linger <username>, aber dies scheint überhaupt keine Auswirkungen zu haben. Tatsächlich heißt es auf der Manpage:

       Enable/disable user lingering for one or more users. If enabled for
       a specific user, a user manager is spawned for the user at boot and
       kept around after logouts. This allows users who are not logged in
       to run long-running services.

Trotz Ausführung dieses Befehls startet mein Dienst nicht beim Booten.

loginctl enable-linger error

Die Einheit:

$ cat ~/.config/systemd/user/thin\@.service
[Unit]
Description=A fast and very simple Ruby web server

[Service]
Type=simple
EnvironmentFile=/home/error/.config/thin/%i
ExecStart=/usr/bin/bash /home/error/.rvm/wrappers/%i/thin start -a $THIN_BIND -p $THIN_PORT
WorkingDirectory=/srv/www/%i
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Wenn ich neu starte, läuft es nicht:

$ systemctl --user status thin@redmine -l
● thin@redmine.service - A fast and very simple Ruby web server
   Loaded: loaded (/home/error/.config/systemd/user/thin@.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

# systemctl status user@1000 -l
● user@1000.service - User Manager for UID 1000
   Loaded: loaded (/usr/lib/systemd/system/user@.service; static; vendor preset: disabled)
   Active: active (running) since Wed 2015-12-23 19:43:27 GMT; 13s ago
 Main PID: 613 (systemd)
   Status: "Startup finished in 38ms."
   CGroup: /user.slice/user-1000.slice/user@1000.service
           ├─613 /usr/lib/systemd/systemd --user
           └─615 (sd-pam)                                                          

Dec 23 19:43:27 redmine systemd[613]: Reached target Sockets.
Dec 23 19:43:27 redmine systemd[613]: Starting Sockets.
Dec 23 19:43:27 redmine systemd[613]: Reached target Timers.
Dec 23 19:43:27 redmine systemd[613]: Starting Timers.
Dec 23 19:43:27 redmine systemd[613]: Reached target Basic System.
Dec 23 19:43:27 redmine systemd[613]: Starting Basic System.
Dec 23 19:43:27 redmine systemd[613]: Reached target Default.
Dec 23 19:43:27 redmine systemd[613]: Startup finished in 38ms.
Dec 23 19:43:27 redmine systemd[613]: Starting Default.
Dec 23 19:43:27 redmine systemd[1]: Started User Manager for UID 1000.

Ich kann es manuell starten und es funktioniert:

$ systemctl --user start thin@redmine
$ systemctl --user status thin@redmine -l
● thin@redmine.service - A fast and very simple Ruby web server
   Loaded: loaded (/home/error/.config/systemd/user/thin@.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2015-12-23 19:43:50 GMT; 5s ago
 Main PID: 1265 (ruby)
   CGroup: /user.slice/user-1000.slice/user@1000.service/thin.slice/thin@redmine.service
           └─1265 ruby /home/error/.rvm/gems/ruby-2.2.1@redmine/bin/thin start -a ::1 -p 8008

Dec 23 19:43:50 redmine systemd[613]: Started A fast and very simple Ruby web server.
Dec 23 19:43:50 redmine systemd[613]: Starting A fast and very simple Ruby web server...
Dec 23 19:43:52 redmine bash[1265]: /home/error/.rvm/gems/ruby-2.2.1@redmine/gems/htmlentities-4.3.1/lib/htmlentities/mappings/expanded.rb:465: warning: duplicated key at line 466 ignored: "inodot"

# systemctl status user@1000 -l
● user@1000.service - User Manager for UID 1000
   Loaded: loaded (/usr/lib/systemd/system/user@.service; static; vendor preset: disabled)
   Active: active (running) since Wed 2015-12-23 19:43:27 GMT; 40s ago
 Main PID: 613 (systemd)
   Status: "Startup finished in 38ms."
   CGroup: /user.slice/user-1000.slice/user@1000.service
           ├─613 /usr/lib/systemd/systemd --user
           ├─615 (sd-pam)                                                       
           └─thin.slice
             └─thin@redmine.service
               └─1265 ruby /home/error/.rvm/gems/ruby-2.2.1@redmine/bin/thin start -a ::1 -p 8008                                                               

Dec 23 19:43:27 redmine systemd[613]: Startup finished in 38ms.
Dec 23 19:43:27 redmine systemd[613]: Starting Default.
Dec 23 19:43:27 redmine systemd[1]: Started User Manager for UID 1000.
Dec 23 19:43:50 redmine systemd[613]: Created slice -.slice.
Dec 23 19:43:50 redmine systemd[613]: Starting -.slice.
Dec 23 19:43:50 redmine systemd[613]: Created slice thin.slice.
Dec 23 19:43:50 redmine systemd[613]: Starting thin.slice.
Dec 23 19:43:50 redmine systemd[613]: Started A fast and very simple Ruby web server.
Dec 23 19:43:50 redmine systemd[613]: Starting A fast and very simple Ruby web server...
Dec 23 19:43:52 redmine bash[1265]: /home/error/.rvm/gems/ruby-2.2.1@redmine/gems/htmlentities-4.3.1/lib/htmlentities/mappings/expanded.rb:465: warning: duplicated key at line 466 ignored: "inodot"

Wie finde ich heraus, warum dieser Dienst nicht beim Booten startet, und wie kann ich ihn dazu bringen?

Das Betriebssystem ist Fedora 23 x86_64, systemd 222-10.

Antworten:


60

Zahlen, die ich selbst herausfinden würde.

Der Hinweis war hier in der Benutzerdienstausgabe:

Dec 23 19:43:27 redmine systemd[613]: Reached target Default.

Mein Gerät wollte geladen werden multi-user.target, aber es gibt kein solches Ziel im Benutzersystem.

Ich habe dies default.targetin der Gerätedatei geändert, den Dienst deaktiviert und wieder aktiviert und er startet jetzt beim Booten.

[Install]
WantedBy=default.target

und dann

$ systemctl --user disable thin@redmine
Removed symlink /home/error/.config/systemd/user/multi-user.target.wants/thin@redmine.service.
$ systemctl --user daemon-reload
$ systemctl --user enable thin@redmine
Created symlink from /home/error/.config/systemd/user/default.target.wants/thin@redmine.service to /home/error/.config/systemd/user/thin@.service.

2
Groß. Vielen Dank! Anlehnen Haben auch auf multi-user.target für meine Benutzereinheit ...
gue

2
Vielen Dank! Verwenden Sie systemctl --user list-units --type=targetdiese Option, um die Ziele für den Benutzer systemd aufzulisten.
Phinz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.