Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/08/2010, à 16:16

ehmicky

[Résolu]Problème avec crontab

Bonjours à tous smile,

Je ne comprends pas, crontab a toujours bien marché pour moi, mais là, le crontab suivant :

0 18 * * * echo "test" > /a/a

ne s'exécute pas à 18:00. Je me suis demandé si ça venait des locales, mais elles ont l'air d'être ok, et 0 6 * * * ne fonctionne pas plus.

Autre question : pourquoi zenity ne marche pas avec cron ? Doit-il obligatoirement être associé à un pseudo-terminal ou à un terminal interactif ?

Merci beaucoup !

Dernière modification par ehmicky (Le 06/09/2010, à 15:06)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#2 Le 10/08/2010, à 16:21

sputnick

Re : [Résolu]Problème avec crontab

Pour zenity, il faut forcer le DISPLAY à utiliser ; cron ne tourne pas avec le même environnement que toi, donc tu doit lui "setter" cette variable. Exemple :

* * * * * DISPLAY=:0 /usr/bin/zenity --info --title title --text "this is a test at $(/bin/date)"

pour /a/a, ça necessite d'avoir les droits root. tu a mis ça en crontab root ? Sinon choisit un autre chemin :

* * * * * echo test > /tmp/test

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 10/08/2010, à 17:12

ehmicky

Re : [Résolu]Problème avec crontab

Ca marche impeccable pour zenity, sous la forme :

DISPLAY=":0"
* * * * * /usr/bin/zenity --info --text="this is a test"

Par contre, cela ne fonctionne pas sous la forme :

DISPLAY=":0"
SHELL=/bin/bash
* * * * * /script.sh

soit :

$ cat /script.sh
#!/bin/bash

/usr/bin/zenity --info --text="this is a test"

et :

$ ls -l /script.sh
lrwxrwxrwx 1 user user 17 2010-08-10 15:48 script.sh

Pour le deuxième point, ce que je ne comprends pas, c'est que c'est pas un problème de permission, car :

0 18 * * * echo "test" > /a/a

échoue, mais :

0 * * * * echo "test" > /a/a

fonctionne.

Dernière modification par ehmicky (Le 10/08/2010, à 17:13)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#4 Le 10/08/2010, à 17:41

sputnick

Re : [Résolu]Problème avec crontab

Pour le problème à 18h, est tu sur que ton system est à l'heure ?
Ya de grandes chances que... Non.
regarde la sortie de la commande date et si besoin lance cela :

ntpdate -s fr.pool.ntp.org

pour mettre à l'heure.

Pour le display, tu peut le mettre dans ton script avec un

export DISPLAY=:0

au debut du script après le shebang.
Comme tu voit, ya plusieurs façons de forcer la variable.


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#5 Le 10/08/2010, à 17:51

ehmicky

Re : [Résolu]Problème avec crontab

Pour DISPLAY, je viens d'essayer avec un "export DISPLAY=:0" dans le script lui-même, et ça ne marche pas.
Par ailleurs la commande lancée par le crontab hérite de l'environnement du crontab, donc même sans le "export DISPLAY=:0", j'ai essayé un :

echo $DISPLAY > /fichier_quelconque

juste avant l'invocation de zenity, et la variable DISPLAY est bien égale à ":0"

Par contre, pour la date, c'est à l'heure, puisque je fais un :

date -s "17:59:55"

à chaque fois pour modifier l'heure si la commande s'éxécute à 18 heures, puis je vérifie par un "date" simple, dont voici l'output (mes locales sont intentionnellement en anglais) :

Tue Aug 10 17:59:56 CEST 2010

Dernière modification par ehmicky (Le 10/08/2010, à 18:00)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#6 Le 06/09/2010, à 07:36

credenhill

Re : [Résolu]Problème avec crontab

hello

ehmicky a écrit :
$ ls -l /script.sh
lrwxrwxrwx 1 user user 17 2010-08-10 15:48 script.sh

pourquoi script sh est un lien ? que répond

ls -lL /script.sh

tu utilises la commande crontab -e pour modifier ?

Hors ligne

#7 Le 06/09/2010, à 13:26

Totor

Re : [Résolu]Problème avec crontab

un truc tout bête :

0 * * * * date >> /tmp/testcron.log

puis :

for i in {0..23}
do
date -s "$(printf "%02d:59:55" $i)"
sleep 10
done
cat  /tmp/testcron.log

Dernière modification par Totor (Le 06/09/2010, à 13:29)


-- Lucid Lynx --

Hors ligne

#8 Le 06/09/2010, à 15:05

ehmicky

Re : [Résolu]Problème avec crontab

@credenhill : Je viens de reprendre le "dossier", et je ne sais pas pourquoi mon script était un lien ! En tout cas, je viens de le reessayer sans lien symbolique. J'utilise :

vim /moncrontab
crontab -u root /moncrontab
crontab -l -u root

pour éditer, mettre puis vérifier mon crontab.

@Totor :
Le test marche (j'ai une suite de lignes du style "Mon Sep  6 18:00:01 CEST 2010"), mais à condition que le script indique :

date -s "$(printf "%02d:58:55" $i)"

et non :

date -s "$(printf "%02d:59:55" $i)"

Ce qui me fait penser que cron commence à s'activer une minute avant d'effectuer son action, et que du coup, changer artificiellement la date avec date -s échouait parce que je cherchais à remonter le temps juste 5 secondes avant l'exécution du crontab, alors qu'il faut lui laisser au moins 25 secondes de délai, pour préparer le crontab de la minute qui suit !

Donc au final : en fait rajouter la variable DISPLAY suffit pour inclure zenity dans mon script. Le problème était que le crontab ne s'exécutait pas. Il ne s'exécutait pas, parce qu'un crontab devant être exécuté à un temps t, doit être actif au moins 25 secondes avant !

Ainsi, je faisais toujours :

date -s 17:59:55

ce qui faisait que le crontab de 18:00 était zappé (mais pas éventuellement celui de 18:01 s'il y en avait un). Alors que :

date -s 17:59:30

marche impèc'. (J'ai testé de nombreuses fois !)
Donc, problème résolu ! Merci wink


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne