Bonsoir tout le monde

J'aimerai lancer avec crontab un script que j'ai fait, pour me permettre d'enregistrer un flux télé freebox...
J'ai enregistré ce script dans /home/monuser et j'ai fait un chmod u+x dessus. Lorsque je lance le script tout seul tout marche bien, par contre par le crontab, ça ne fonctionne pas. Voilà le résultat d'un crontab -l
32 0 15 8 * /home/Sven/freeboxrec.sh
Le script freeboxrec.sh ne s'est pas lancé a 00h32 le 15 aout... Je ne comprends pas trop d'où pourrait venir le souci.
Est ce que vous pourriez m'aider siouplé ?
Essaie ça :
32 0 15 8 * sh /home/Sven/freeboxrec.sh
Parce que dans ton exemple, il n'y a aucune commande, juste un chemin. :-P
Kenshin wrote:Essaie ça :
32 0 15 8 * sh /home/Sven/freeboxrec.sh
Parce que dans ton exemple, il n'y a aucune commande, juste un chemin. :-P
Merci Kenshin, je venais d'essayer avec
46 0 15 8 * /bin/sh /home/Sven/freeboxrec.sh
Je tente tout de suite avec ce que tu viens de me dire 😃

Edit : non ça ne marche toujours pas... Je ne capte pas où est le souci. J'ai juste fait un script bash (#!/bin/bash) que j'ai nommé freeboxrec.sh. Lorsque je fais dans un terminal
bash freeboxrec.sh
ça me le lance sans souci, de même que
sh freeboxrec.sh
Avec /bin/sh ça devrait être bon aussi :-P
Ça marche pas pourtant 🙁 . Voilà en détail les permissions de mon script, au cas où ça vienne de là
-rwxrw-r-- 1 Sven Sven 292 août 14 23:49 freeboxrec.sh
Non, je pense pas que ce soit un problème de permission...
J'avais aussi un script à lancer via crontab, et après un chmod+x et sh devant le chemin, ça tournait.

Et j'ai regardé ton cron, ça m'a l'air bien paramètré...donc là je sèche.
Merci en tout cas Kenshin
J'essaie en tatonnant
10 1 15 8 * /usr/bin/exaile
ne m'a pas lancé exaile... C'est bizarre non ? :-?
Bonjour,

les commandes lancées via cron ont l'environnement défini dans /etc/crontab : si ton script utilisent des commandes qui sont hors de ce path, il faut que tu donnes le chemin complet ou que tu spécifies le PATH au début du script.
Pour savoir si ta tâche a été lancée, regarde dans /var/log/cron
Salut Proxy, merci pour ta réponse
J'ai édité le fichier /etc/crontab pour voir à quoi ça correspondait
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
Donc si je comprends bien crontab correspond à des bin qui sont aussi contenu dans /bin et /usr/bin ?
Comment ça se fait dans ces cas là que les précédentes commandes ne se soient pas lancées ?
Pour mon script j'avais bien donné le chemin absolu vu qu'il n'était pas dans path, à savoir /home/Sven/freeboxrec.sh, mais ça n'avait pas marché
Je dois faire une erreur conne
Non, je voulais dire que quand ton script est lancé via cron, il a comme PATH : PATH=/sbin:/bin:/usr/sbin:/usr/bin
donc différent du PATH du user sven
Donc peut être que /home/Sven/freeboxrec.sh utilisent des commandes qui ne sont pas dans /sbin:/bin:/usr/sbin:/usr/bin

Ajout echo "PATH = $PATH" au début de ton script, puis regarde dans /var/log/cron
MErci encore Proxy, en fait mon script fait juste appel à vlc avec une liste d'arguments bien précis et à la fonction --sout de vlc...
Un whereis vlc, me donne le résultat suivant
vlc: /usr/bin/vlc /usr/lib64/vlc /usr/share/vlc /usr/share/man/man1/vlc.1.gz
Le bin est bien dans /usr/bin pourtant ?
C'est plutôt which vlc qu'il faut utiliser pour vérifier le PATH ...
As tu regardé dans les logs ?

Ajoute aussi 2>&1 > /tmp/matache.log à ta commande : cela permet de rediriger les sorties std et err dans un fichier
which vlc retourne /usr/bin/vlc
J'ai regardé dans le /var/log/cron ce que j'avais lancé hier soir, entre autre exaile
Aug 15 08:15:01 localhost CROND[4662]: (Sven) CMD (/usr/bin/exaile)
Aug 15 08:15:01 localhost CROND[4660]: (Sven) MAIL (mailed 1029 bytes of output but got status 0x0041#012)
Aucune trace de vlc pourtant :-?

Pour le echo 'PATH=$PATH' ça va juste me faire un echo du texte entre guillemets ?(à savoir ça va m'afficher PATH=$PATH)

Si j'ajoute ce que tu m'as dit à ma commande, en lançant le script manuellement ça va quand meme me ressortir le message d'erreur ?
Je vous mets le code de mon script au cas où ça pourrait aider
#!/bin/bash
#Programmer un enregistrement avec Vlc
echo 'PATH=$PATH'
/usr/bin/vlc -vvv 'rtsp://mafreebox.freebox.fr/fbxtv_pub/stream?namespace=1&service=375&flavour=sd' --sout '#transcode{vcodec=mp2v,vb=1500,scale=1,acodec=mpga,ab=128,channels=2}:duplicate{dst=std{access=file,mux=ts,dst=nomdefichier2.mpg}}'
- Les sorties d'un script lancé par cron sont envoyés by mail au user : tu le vois dans les logs (Aug 15 08:15:01 localhost CROND[4660]: (Sven) MAIL (mailed 1029 bytes of output but got status 0x0041#012)) : si tu avais installé postfix ou sendmail, avec la commande mail tu pourrais visualiser le retour
- comme dirait quelqu'un : echo "PATH=$PATH" IS NOT echo 'PATH=$PATH' 🙂
- la redirection est à faire dans la cron :
32 0 15 8 * /home/Sven/freeboxrec.sh 2>&1 > /tmp/resultat.log
- pour avoir la sortie dans la console ET dans le fichier, il y a la commande tee : /home/Sven/freeboxrec.sh 2>&1 | tee /tmp/resultat.log
10 1 15 8 * DISPLAY=:0 XAUTHORITY=/home/Sven/.Xauthority
Après ça tu rajoutes ta commande crontab.
Moi aussi vlc ne se lançait pas. Il faut paramétrer le display.
@Kenshin : t'as cassé tout le cheminement incrémental de la recherche du problème de notre ami !!! 😉
D'une façon générale on n'a pas à éditer le fichier crontab. Il se gère avec la *commande* crontab. (man crontab)

Il faut ensuite vérifier que ton utilisateur a bien la permission d'exécuter cette commande. Par défaut c'est une commande d'administration qui n'est pas autorisée aux utilisateurs normaux.
Merci à vous tous pour vos réponses (désolé Kenshin j'ai vu que tu avais donné la solution, mais je vais essayer de comprendre le souci en tatonnant... j'espère ne pas trop vous embêter)... Le log qui sort en résultat au crontab est "normal" jusqu'à cette ligne là
[00000403] main interface debug: looking for interface module: 6 candidates
[00000403] qt4 interface error: Could not connect to X server
[00000403] skins2 interface error: Cannot open display
[00000403] skins2 interface error: cannot initialize OSFactory
[00000403] rc interface warning: fd 0 is not a TTY
[00000403] xosd interface error: no display, please set the DISPLAY variable
[00000403] fbosd interface error: cannot open /dev/fb1 (No such file or directory)
Error opening terminal: unknown.
[00000401] screensaver interface warning: failed to connect to the D-BUS daemon: dbus-launch failed to autolaunch D-Bus session: Autolaunch error: X11 initialization failed.
Apparement un problème de display et de server X, on me demande de "set the display variable"... Et là je sais pas faire, d'ailleurs, je sais pas ce qu'est la display variable, je vais aller googleliser un peu (je vais aussi chercher un peu sur les redirections dans les fichiers de log, ça pourrait être utile 😃)

J'ai juste une petite question : quand je lance le script dans un terminal, le path est
PATH=/usr/lib64/qt-3.3/bin:/usr/kerberos/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/Sven/bin
Alors que lorsqu'il se lance par le crontab le path est
PATH=/usr/bin:/bin
C'est normal ?


Sinon nouvo09, pourquoi dis tu qu'il ne faut pas éditer le fichier crontab ? Dans le man crontab, ils parlent justement de ce "crontab -e" ?
Concernant le PATH, as tu bien lu ma réponse (#8) ?