[RESOLU] Service au démarrage avec systemd sous Jessie

Tags: #<Tag:0x00007f50a0c17c60>

Bonjour la communauté,

Je tourne en rond pour mettre en place un service au démarrage de mon petit serveur maison. J’ai fais le tour du net, consultez quelques doc, mais rien à faire j’aboutis à une erreur lors de sa mise en place.

Je suis Debian Jessie.

Mon but : Au démarrage, je lance une session tmux dans laquelle j’exécute un programme. Je souhaite que cela se fasse tout à la fin de l’amorçage du serveur et pour l’utilisateur “mon_login”.

J’ai pondu ce fichier service, tmux_weechat.service :

[Unit]
Description=Lances Weechat dans un Tmux
After=network-online.target

[Service]
Type=forking
User=mon_login
ExecStart=/usr/bin/tmux new-session -s irc -d && /usr/bin/tmux send -t irc weechat ENTER

[Install]
WantedBy=multi-user.target

Pour info, la commande ExecStart fonctionne.

Lors de son test :

systemctl start tmux_weechat.service

J’obtiens l’erreur suivante :

Warning: Unit file of tmux_weechat.service changed on disk, 'systemctl daemon-reload' recommended.
Job for tmux_weechat.service failed. See 'systemctl status tmux_weechat.service' and 'journalctl -xn' for details.

Et donc :

journalctl -xn

Me retourne :

déc. 12 20:20:33 pc vim[3263]: *** err
déc. 12 20:20:33 pc vim[3263]: checking tty name failed
déc. 12 20:20:33 pc vim[3263]: *** err
déc. 12 20:20:33 pc vim[3263]: Oh, oh, it's an error! possibly I die!
déc. 12 20:20:33 pc vim[3263]: [69B blob data]
déc. 12 20:20:33 pc  vim[3263]: Vim: Finished.
déc. 12 20:20:33 pc  vim[3263]: [7B blob data]
déc. 12 20:20:33 pc systemd[1]: tmux_weechat.service: control process exited, code=exited status=1
déc. 12 20:20:33 pc systemd[1]: Failed to start Lances Weechat dans un Tmux.

J’ai du coup essayé un peu à toute les sauces sans succès, même des copier/coller des .service bateau, ça ne marche pas.

Auriez-vous une piste ?

Merci

Salut,

Ça, ça veut dire que juste avant de lancer la commande :

#systemctl start _mon_service_.service

tu as fait une modification sur le fichier en question sans recharger entre-temps avec :

# systemctl daemon-reload

Au passage ton fichier “tmux–.service” tu l’as placé dans quel repértoire?

Mon fichier se trouve dans /etc/systemd/system.

Je viens de relancer après un :
systemctl daemon-reload

Voici l’erreur :

L'unité (unit) tmux_weechat.service a commencé à démarrer.
déc. 12 21:50:35 pc systemd[1]: tmux_weechat.service: control process exited, code=exited status=1
déc. 12 21:50:35 pc systemd[1]: Failed to start Lances Weechat dans un Tmux.
-- Subject: L'unité (unit) tmux_weechat.service a échoué

Et après un :

systemctl status tmux_weechat.service

tmux_weechat.service - Lances Weechat dans un Tmux
   Loaded: loaded (/etc/systemd/system/tmux_weechat.service; disabled)
   Active: failed (Result: exit-code) since lun. 2016-12-12 21:50:35 CET; 2min 43s ago
  Process: 4237 ExecStart=/usr/bin/tmux new-session -s irc -d && /usr/bin/tmux send -t irc weechat ENTER (code=exited, status=1/FAILURE)

déc. 12 21:50:35 pc systemd[1]: tmux_weechat.service: control process exited, code=exited status=1
déc. 12 21:50:35 pc systemd[1]: Failed to start Lances Weechat dans un Tmux.
déc. 12 21:50:35 pc systemd[1]: Unit tmux_weechat.service entered failed state.

Vu le retour de l’erreur, le diagnostique est difficile…

Je suppose que l’utilisateur “mon_login” désigne ton compte utilisateur?

Si oui, que se passe t-il lorsque tu lances la commande dans un terminal en tant qu’utilisateur “mon_login” :

mon_login@ma_machine : ~$ /usr/bin/tmux new-session -s irc -d && /usr/bin/tmux send -t irc weechat ENTER

“mon_login” est bien mon compte utilisateur et cette commande fonctionne bien :wink:

irc: 1 windows (created Mon Dec 12 22:05:40 2016)

Et que te retourne :

# journalctl -u tmux_weechat.service

Je passe le détails des tentatives avant la daemon-reload :

déc. 12 21:49:23 pc systemd[1]: Unit tmux_weechat.service entered failed state.
déc. 12 21:50:35 pc systemd[1]: Starting Lances Weechat dans un Tmux...
déc. 12 21:50:35 pc systemd[1]: tmux_weechat.service: control process exited, code=exited status=1
déc. 12 21:50:35pc systemd[1]: Failed to start Lances Weechat dans un Tmux.
déc. 12 21:50:35pc systemd[1]: **Unit tmux_weechat.service entered failed state.**
lines 79-111/111 (END)

Je ne suis pas expert mais je pense que le problème se situe dans la commande passée sous l’option “ExecStart=”, et l’interpretation par systemd de celle-ci, mais je ne saurai pas t’en dire plus là…

EUREKA ! Tu m’a mis sur la bonne piste ! Merci !

Le problème provient bien du Execstart, qui semble ne pas aimer les ‘&&’.

J’ai donc fais un script .sh dans laquelle j’ai collé la commande et passé ce script en paramètre de Execstart.

Je viens de faire un test sur une VM ! Ca marche niquel ! :smile:

Plutot que d’utiliser un script, penches toi sur le manuel de systemd, en particulier ceci :

https://www.freedesktop.org/software/systemd/man/systemd.service.html

Normalement tu dois pouvoir, au lieu d’utiliser “&&”, faire deux lignes “ExecStart=” l’une à la suite de l’autre et systemd les executera dans l’ordre où elles apparaissent dans le fichier si j’ai bien compris (je suis un peu dans les choux ce soir). C’est plus propre qu’un script qui ajoute une couche à mon sens.

Re bingo ! T’es un bon :slight_smile:

Ca marche sur deux lignes en utilisant ceci :

(...)
 Type=forking
(...)
ExecStart=commande 1
ExecStartPost=commande 2
(...)

Vive l’entraide et… les VM pour les tests :slight_smile:

Content pour toi :slight_smile:
Alors choisis la réponse qui te convient le mieux et coches le sujet comme résolu. :wink: