Pourquoi mon unité utilisateur systemd ne démarre-t-elle pas au démarrage?

40

J'essaie de créer une unité utilisateur systemd et de la démarrer au démarrage du système. Le service démarre manuellement, mais il ne démarre pas au démarrage.

En effectuant une recherche sur Internet, j'ai appris que pour que les unités utilisateur puissent démarrer au démarrage, je devais être loginctl enable-linger <username>obligé de fonctionner , mais cela semble n'avoir eu aucun effet. En effet, la page de manuel dit:

       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.

Malgré l'exécution de cette commande, mon service ne démarre pas au démarrage.

loginctl enable-linger error

L'unité:

$ 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

Lorsque je redémarre, il ne s'exécute pas:

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

# systemctl status user@1000 -l
● [email protected] - User Manager for UID 1000
   Loaded: loaded (/usr/lib/systemd/system/[email protected]; 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/[email protected]
           ├─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.

Je peux le démarrer manuellement, et cela fonctionne:

$ systemctl --user start thin@redmine
$ systemctl --user status thin@redmine -l
● [email protected] - A fast and very simple Ruby web server
   Loaded: loaded (/home/error/.config/systemd/user/[email protected]; 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/[email protected]/thin.slice/[email protected]
           └─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
● [email protected] - User Manager for UID 1000
   Loaded: loaded (/usr/lib/systemd/system/[email protected]; 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/[email protected]
           ├─613 /usr/lib/systemd/systemd --user
           ├─615 (sd-pam)                                                       
           └─thin.slice
             └─[email protected]
               └─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"

Comment comprendre pourquoi ce service ne démarre pas au démarrage et comment le faire?

Le système d'exploitation est Fedora 23 x86_64, systemd 222-10.

Michael Hampton
la source

Réponses:

61

Des chiffres que je découvrirais moi-même.

L'indice était là, dans la sortie du service utilisateur:

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

Mon unité demandait à être chargée multi-user.target, mais il n'y a pas de cible de ce type dans l'utilisateur systemd.

J'ai changé cela default.targetdans le fichier d'unité, désactivé et réactivé le service, et il commence maintenant au démarrage.

[Install]
WantedBy=default.target

et alors

$ systemctl --user disable thin@redmine
Removed symlink /home/error/.config/systemd/user/multi-user.target.wants/[email protected].
$ systemctl --user daemon-reload
$ systemctl --user enable thin@redmine
Created symlink from /home/error/.config/systemd/user/default.target.wants/[email protected] to /home/error/.config/systemd/user/[email protected].
Michael Hampton
la source
2
Génial. Merci! Je me suis également appuyé sur multi-user.target pour mon unité d'utilisateur ...
mardi
3
Merci beaucoup! Utilisez systemctl --user list-units --type=targetpour lister les cibles pour l'utilisateur systemd.
Phinz