Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

tâche cron ne fait rien...

3 réponses
Avatar
Une Bévue
je viens d'ajouter une tâche dans ma crontab :

$ sudo cat /var/spool/cron/crontabs/yt

[...]

*/5 * * * * /home/yt/bin/root_scripts/wallpapers >/dev/null 2>&1 # JOB_ID_4


le job "wallpapers" s'exécute bien toutes les 5 minutes (je le vois au
fichier de log :
$ cat ~/Logs/wallpapers.log

[...]

********************************************************************************
Le 24 mai 2015 à 10H45:01
File
'/home/yt/Images/Backgrounds/2014_08_05__16_11_34__DSC_0019_Ainsa_Espagne.JPG'
opened.
********************************************************************************
Le 24 mai 2015 à 10H50:01
File '/home/yt/Images/Backgrounds/Barley.jpg' opened.


le fichiers "wallpapers" est le compilé de "wallpapers.c" :
$ lal wall*
-rwsr-xr-x 1 root root 7337 mai 24 08:27 wallpapers*
-rw-r--r-- 1 yt yt 185 mai 24 08:26 wallpapers.c
-rwsr-xr-x 1 root root 555 mai 24 10:04 wallpapers.sh*

lequel n'est qu'un lanceur de "wallpapers.sh" :
$ cat wallpapers.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
setuid( 0 );
system( "/home/yt/bin/root_scripts/wallpapers.sh" );

return 0;
}


le contenu de "wallpapers.sh" étant :
$ cat wallpapers.sh
#!/usr/bin/env bash
WALLPAPERS="/home/yt/Images/Backgrounds"
LOG="/home/yt/Logs/wallpapers.log"
ALIST=( `ls -w1 $WALLPAPERS` )
RANGE=${#ALIST[@]}
let "number = $RANDOM"
let LASTNUM="`cat $WALLPAPERS/.last` + $number"
let "number = $LASTNUM % $RANGE"
echo $number > $WALLPAPERS/.last
echo
"********************************************************************************"
>> $LOG
date '+Le %d %B %Y à %HH%M:%S' >> $LOG
echo "File '$WALLPAPERS/${ALIST[$number]}' opened." >> $LOG
/usr/bin/feh --bg-scale $WALLPAPERS/${ALIST[$number]} >> $LOG


le fichier $WALLPAPERS/.last change correctement :
┬─[yt@d620:~/bin/root_scripts]─[10:06:02]

╰─>$ cat ~/Images/Backgrounds/.last
109

┬─[yt@d620:~/bin/root_scripts]─[10:06:20]

╰─>$ cat ~/Images/Backgrounds/.last
24

┬─[yt@d620:~/bin/root_scripts]─[10:57:42]

╰─>$ cat ~/Images/Backgrounds/.last
3

d'ailleurs, le nom du fichier sélectionné varie bien (cf.log)

MAIS, et c'est là ma question, feh ne met pas à jour l'image (quand feh
tourne par cron), c'est la ligne :
/usr/bin/feh --bg-scale $WALLPAPERS/${ALIST[$number]} >> $LOG
de mon script.

alors j'ai imaginé que le problème provenanit du fait que feh est
éxécuté sous root par cron, alors j'ai essayé au term :
$ sudo feh --bg-scale
/home/yt/Images/Backgrounds/beautiful_italian_landscape-wallpaper-1680x1050.jpg

donc exécuté feh en tant que root et ça marche bien mon bureau change de
fond d'écran.
dans le fichier de log, je n'ai pas d'erreur provenant de feh.


à votre avis qu'est-ce qui empèche feh de faire son boulot ?
où est mon erreur ?
où comment mieux débugger ce que j'ai fait ?

3 réponses

Avatar
Doug713705
Le 24-05-2015, Une Bévue nous expliquait dans
fr.comp.os.linux.configuration
(<mjs4fc$scf$) :

alors j'ai imaginé que le problème provenanit du fait que feh est
éxécuté sous root par cron, alors j'ai essayé au term :
$ sudo feh --bg-scale
/home/yt/Images/Backgrounds/beautiful_italian_landscape-wallpaper-1680x1050.jpg

donc exécuté feh en tant que root et ça marche bien mon bureau change de
fond d'écran.
dans le fichier de log, je n'ai pas d'erreur provenant de feh.


à votre avis qu'est-ce qui empèche feh de faire son boulot ?
où est mon erreur ?
où comment mieux débugger ce que j'ai fait ?



Dasn le fait que feh a besoin d'avoir accès à $DISPLAY pour savoir sur
quel écran afficher l'image ?

Essaie avec:
export DISPLAY=:0.0 feh...

Par ailleurs si le but de ton script est de remplacer l'image de fond
d'écran à intervalle régulier, tu n'as pas besoin de cron pour ça ; feh
gère ça tout seul !

Quelques options que pourraient être utiles extraites de man feh:
-f, --filelist file
-z, --randomize
-r, --recursive
-D, --slideshow-delay float

Ce sont des pistes, je n'ai pas essayé moi même.

--
Mais l'ombre des plaisirs s'enfuit
Toujours plus loin vers l'inconnu.
-- H.F. Thiéfaine, La môme kaléïdoscope
Avatar
Une Bévue
On 24/05/2015 11:28, Doug713705 wrote:
Dasn le fait que feh a besoin d'avoir accès à $DISPLAY pour savoir sur
quel écran afficher l'image ?

Essaie avec:
export DISPLAY=:0.0 feh...




euh, ben je ne pense pas mais c'est à vérifier, en tout cas :
$ feh --bg-scale mon-image.jpg
ça roule avec ou sans sudo.

Par ailleurs si le but de ton script est de remplacer l'image de fond
d'écran à intervalle régulier, tu n'as pas besoin de cron pour ça ; feh
gère ça tout seul !



Ah, OK, merci pour l'info, je regarderai ça asap.

Quelques options que pourraient être utiles extraites de man feh:
-f, --filelist file
-z, --randomize
-r, --recursive
-D, --slideshow-delay float

Ce sont des pistes, je n'ai pas essayé moi même.



ok man fek koâ.

Merci bien.
Avatar
Une Bévue
On 24/05/2015 11:28, Doug713705 wrote:

Par ailleurs si le but de ton script est de remplacer l'image de fond
d'écran à intervalle régulier, tu n'as pas besoin de cron pour ça ; feh
gère ça tout seul !

Quelques options que pourraient être utiles extraites de man feh:
-f, --filelist file
-z, --randomize
-r, --recursive
-D, --slideshow-delay float

Ce sont des pistes, je n'ai pas essayé moi même.



C'est grosso-modo ce qu'il faut faire, et ça marche sans cron...

ma commande testée :

$ /usr/bin/feh -Z -F -z -D 10.0 /home/yt/Images/Backgrounds &

la même commande en plus clair :
/usr/bin/feh --auto-zoom --fullscreen --randomize --slideshow-delay 10.0
/home/yt/Images/Backgrounds

je n'ai pas mis l'option "-r, --recursive" vu que mon répertoire est plat.

Encore merci à Doug.

RTFM ;-)