[systemd --user] Activer le .timer (Résolu)

Applications, problèmes de configuration réseau
clapas
yeomen
Messages : 274
Inscription : sam. 08 sept. 2012, 07:23
Localisation : Comtat Venaissin

[systemd --user] Activer le .timer (Résolu)

Message par clapas »

Bonjour,
Pour arrêter mon PC dans le cas où je ne l'aurais pas fait avant, je teste le lancement d'un script par une entrée dans crontab.

Le script est tout simple et fonctionne bien si je le lance en ligne de commande. Il est dans ce style :

Code : Tout sélectionner

#!/bin/bash
notify-send "blabla"
sleep 5
notify-send "shutdown -c dans un terminal stoppera le processus"
sleep 30
shutdown -P +0
exit0
La ligne de crontab est :

Code : Tout sélectionner

00 00  *  *  *  /home/clapas/JeFerme.sh
Et c'est ici que ça coince, le script se déclenche bien mais ne produit pas le résultat attendu.
J'ai cherché à exploiter d'éventuels messages d'erreur dans un fichier cron.log. Le fichier se fabrique bien et se rempli après exécution de cron mais il est illisible par un éditeur de texte.

Merci pour vos conseils pour poursuivre la recherche des erreurs.
Dernière modification par clapas le ven. 24 févr. 2017, 08:05, modifié 2 fois.
Avatar de l’utilisateur
papajoke
Elfe
Messages : 779
Inscription : sam. 30 août 2014, 19:54

Re: [crontab] Ne déroule pas tout le script lancé.

Message par papajoke »

Code : Tout sélectionner

export DISPLAY=:0.0
avec systemd timer --user , je n'utilise plus de cron depuis longtemps
Arch stable - Kde 5 / zsh - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [crontab] Ne déroule pas tout le script lancé.

Message par benjarobin »

Non, l'export n'est pas forcément suffisant si lancé depuis un crontab en root. Mais en effet le faire via un timer user systemd est sûrement plus propre.
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
clapas
yeomen
Messages : 274
Inscription : sam. 08 sept. 2012, 07:23
Localisation : Comtat Venaissin

Re: [crontab] Ne déroule pas tout le script lancé.

Message par clapas »

Merci pour ces conseils.
Je suis donc passé par systemd --user, mais il reste un point à régler :
Le script jeferme.sh est bon
Le service et le timer sont aussi bons, vu que si je lance :

Code : Tout sélectionner

systemctl --user start jeferme.timer
Tout se déroule comme attendu.

Mais après avoir fait

Code : Tout sélectionner

systemctl --user enable jeferme.timer
si je demande

Code : Tout sélectionner

systemctl --user list-timers
la réponse est "0 timers listed"
son status est .

Code : Tout sélectionner

systemctl --user status jeferme.timer
● jeferme.timer - Fermer la machine
   Loaded: loaded (/home/clapas/.config/systemd/user/jeferme.timer; enabled; vendor preset: enabled)
   Active: inactive (dead)
Pouvez-vous m'indiquer quelle est la bonne méthode pour que ce jeferme.timer soit activé dès le démarrage de la machine sans avoir à faire un "start".
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [crontab] Ne déroule pas tout le script lancé.

Message par benjarobin »

Quel est le contenu de jeferme.timer et de jeferme.service et tu les as placé où ?
En plus peux tu donner la sortie de :

Code : Tout sélectionner

systemctl --user cat jeferme.timer jeferme.service
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
clapas
yeomen
Messages : 274
Inscription : sam. 08 sept. 2012, 07:23
Localisation : Comtat Venaissin

Re: [crontab] Ne déroule pas tout le script lancé.

Message par clapas »

Voilà le retour :

Code : Tout sélectionner

[clapas@ds81 ~]$ systemctl --user cat jeferme.timer jeferme.service
# /home/clapas/.config/systemd/user/jeferme.timer
[Unit]
Description=Fermer la machine

[Timer]
OnCalendar=*-*-* 23:50:00
Persistent=true
Unit=jeferme.service

[Install]
WantedBy=jeferme.service

# /home/clapas/.config/systemd/user/jeferme.service
Unit]
Description=On ferme la machine
 
[Service]
Environment=DISPLAY=:0
ExecStart=/home/clapas/jeferme.sh

 
[Install]
WantedBy=basic.target
[clapas@ds81 ~]$ 
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [systemd --user] Activer le .timer

Message par benjarobin »

Oula cela ne va pas vraiment, il y a plein d'erreur et de faute de frappe...
Désactive le timer avant, supprime tout trace de jeferme...

Code : Tout sélectionner

find /home/clapas/.config -name "*jeferme*"
Remplace les fichiers par ce que je donne
/home/clapas/.config/systemd/user/jeferme.timer

Code : Tout sélectionner

[Unit]
Description=Fermer la machine

[Timer]
OnCalendar=*-*-* 23:50:00
Persistent=true

[Install]
WantedBy=default.target
/home/clapas/.config/systemd/user/jeferme.service

Code : Tout sélectionner

[Unit]
Description=On ferme la machine
 
[Service]
Environment=DISPLAY=:0
ExecStart=/home/clapas/jeferme.sh
Puis

Code : Tout sélectionner

systemctl --user daemon-reload
systemctl --user enable jeferme.timer
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
clapas
yeomen
Messages : 274
Inscription : sam. 08 sept. 2012, 07:23
Localisation : Comtat Venaissin

Re: [systemd --user] Activer le .timer

Message par clapas »

Merci Benjarobin pour toutes ces informations.

Effectivement, à force de copier coller, j'avais omis un crochet ouvrant à [unit] de jeferme.service. Mais cela n'empêche pas le service de fonctionner :)

Par contre, ce qui me manquait c'était de recharger, après modification en faisant les tests.

Code : Tout sélectionner

systemctl --user daemon-reload 
J'ai adopté ta version du service et du timer car elle est plus simple et certainement plus conforme, mais mon ancienne version fonctionne aussi.
Dernière modification par clapas le dim. 26 févr. 2017, 09:23, modifié 1 fois.
clapas
yeomen
Messages : 274
Inscription : sam. 08 sept. 2012, 07:23
Localisation : Comtat Venaissin

Re: [systemd --user] Activer le .timer (Résolu)

Message par clapas »

Correction sur la valeur de Persistent=
Dans ce cas, il faut Persistent=false sinon le service peut être activé quand il ne le faut pas. En effet, avec "true", si la machine est éteinte avant l'heure de déclenchement, alors le service "rattrapera son retard" dès le prochain démarrage. résultat : le PC s'éteindra dès son démarrage :)
Répondre