[anacron] notification à l'aide de systemd (résolu)
Publié : mar. 01 juil. 2014, 14:38
Salut à tous,
j'aimerais savoir lorsqu'une nouvelle version beta du logiciel geogebra (en version beta) sort. Pour cela j'ai écrit un script (
J'ai vu que systemd inclus un système semblable à anacron et cron. J'aimerais recevoir chaque jour une notification et si la machine était éteinte au moment de l'envoi de la notification, j'aimerais qu'elle soit envoyée lors de la prochaine utilisation. Pour tester si tout fonctionne, je me contente maintenant d'une tâche semblable à cron, on passera à anacron après. J'utilise la commande suivante pour envoyer la notification:
où
Rien ne se passe. Là j'avoue que ce n'est pas du tout clair pourquoi. J'ai toutefois trouvé que si je lance la commande notify-send avec mon utilisateur, tout fonctionne bien. J'en déduis que c'est ce qu'il faut faire. Mais maintenant comment ? Je vois deux solutions et je ne sais pas quoi privilégier, sans compter qu'au niveau sécurité je n'en sais rien. La première: dans le
Pour que notify-send soit lancé avec mon utilisateur. J'ai aussi remarqué qu'on peut spécifier un utilisateur dans le service. Toutefois si je l'utilise, j'obtiens l'erreur suivante:
A mon avis c'est parce que j'ai juste utilisé la ligne User dans:
Je pense que dans ce cas je dois suivre le wiki ici. Mais avant de continuer j'aimerais savoir si je suis sur la bonne voie ou si j'ai tout faux. Quelle piste dois-je choisir ? Comme je fais ça pour la première fois, je n'ai aucun repère.
Merci!
Fichier timer-hourly.target:
Fichier timer-hourly.timer:
Fichier geogebra.service:
j'aimerais savoir lorsqu'une nouvelle version beta du logiciel geogebra (en version beta) sort. Pour cela j'ai écrit un script (
geogebra.sh
) qui me donne la dernière version et j'aimerais recevoir des notifications lorsqu'une nouvelle version est sortie (pas trouvé de flux rss, ni de mailing list). Je vais expliquer ma méthode, n'hésitez pas à me dire s'il y a plus simple. J'ai vu que systemd inclus un système semblable à anacron et cron. J'aimerais recevoir chaque jour une notification et si la machine était éteinte au moment de l'envoi de la notification, j'aimerais qu'elle soit envoyée lors de la prochaine utilisation. Pour tester si tout fonctionne, je me contente maintenant d'une tâche semblable à cron, on passera à anacron après. J'utilise la commande suivante pour envoyer la notification:
Code : Tout sélectionner
$ notify-send "Nouvelle version de geogebra:\n $file"
$file
contient le nom du nouvel installeur. Je donnerai le contenu des fichiers que j'ai créé après, je donne à présent juste un aperçu. En suivant le wiki, j'ai créé les fichiers: timer-hourly.target, timer-hourly.timer et geogebra.service. C'est le service geogebra-service qui doit m'envoyer la notification. Toutefois, lorsque le service est démarré, ça ne fonctionne pas. J'ai tout d'abord remarqué que systemd ne peux pas exécuter des scripts, il faut lui donner la commande du shell et en argument le script à exécuter. Ca ça doit être bon. A mon avis le problème est le suivant: le service se lance en tant que root. Et si en tant que root j'exécuteCode : Tout sélectionner
$ notify-send "Nouvelle version de geogebra:\n $file"
geogebra.service
:Code : Tout sélectionner
ExecStart=su user -c "/usr/bin/notify-send \"Nouvelle version de geogebra:...\""
Code : Tout sélectionner
Jul 01 15:00:17 bibine systemd[1]: Starting Geogebra notification...
Jul 01 15:00:17 bibine systemd[1]: Started Geogebra notification.
Jul 01 15:00:17 bibine systemd[1]: Starting Hourly Timer Target.
Jul 01 15:00:17 bibine systemd[1]: Reached target Hourly Timer Target.
Jul 01 15:00:17 bibine systemd[1]: Service timer-hourly.target is not needed anymore. Stopping.
Jul 01 15:00:17 bibine systemd[1]: Stopping Hourly Timer Target.
Jul 01 15:00:17 bibine systemd[1]: Stopped target Hourly Timer Target.
Jul 01 15:00:17 bibine systemd[17823]: Failed at step USER spawning /usr/bin/notify-send: No such process
Jul 01 15:00:17 bibine systemd[1]: geogebra.service: main process exited, code=exited, status=217/USER
Code : Tout sélectionner
[Service]
User=user # Add a user if you wish the service to be executes as a particular user, else delete this line
#Type= # Simple by default, change it if you know what you are doing, else delete this line
Nice=19
IOSchedulingClass=2
IOSchedulingPriority=7
Merci!
Fichier timer-hourly.target:
Code : Tout sélectionner
[Unit]
Description=Hourly Timer Target
StopWhenUnneeded=yes
Code : Tout sélectionner
[Unit]
Description=Hourly Timer
[Timer]
OnBootSec=5min
OnCalendar=hourly
Unit=timer-hourly.target
[Install]
WantedBy=basic.target
Code : Tout sélectionner
[Unit]
Description=Geogebra notification
Wants=timer-hourly.timer
[Service]
User=user # Add a user if you wish the service to be executes as a particular user, else delete this line
#Type= # Simple by default, change it if you know what you are doing, else delete this line
Nice=19
IOSchedulingClass=2
IOSchedulingPriority=7
ExecStart=/usr/bin/sh -c "/home/user/geogebra.sh"
[Install]
WantedBy=timer-hourly.target