Aller au contenu

Scripts Qui Ne S'executent Pas Via Cron


Amsonia

Messages recommandés

Bonjour,

J'ai l'impression que les quelques scripts que j'ai mis en place ne s'executent pas via cron.

Voici un extrait de ma crontab : j'ai bien veillé à mettre des tabulations et non des espaces

*/5	*	*	*	*	root	python2.6 /volume1/@choses/gandyn/filemoi-ca.py >> /volume1/@choses/gandyn/filemoi-ca.log

Un fichier filemoi-ca.log est bien créé mais est toujours vide.

Le dossier contenant le script ainsi que le script sont chmodés en 750 (cf capture). Est-ce l'user qui n'est pas le bon ? Si oui, que devrais-je mettre d'autre à la place de root ? nobody ?

Des idées ?

Lien vers le commentaire
Partager sur d’autres sites

J'ai l'impression que les quelques scripts que j'ai mis en place ne s'executent pas via cron.

Voici un extrait de ma crontab : j'ai bien veillé à mettre des tabulations et non des espaces

*/5	*	*	*	*	root	python2.6 /volume1/@choses/gandyn/filemoi-ca.py >> /volume1/@choses/gandyn/filemoi-ca.log
Un fichier filemoi-ca.log est bien créé mais est toujours vide.

Le dossier contenant le script ainsi que le script sont chmodés en 750 (cf capture). Est-ce l'user qui n'est pas le bon ? Si oui, que devrais-je mettre d'autre à la place de root ? nobody ?

Plusieurs choses:

  • la commande "python2.6" n'est très certainement pas dans le PATH des process lancés par cron
  • avec le ">>" tu ne rediriges que la sortie standard, mais la sortie de diagnostic est perdue.

    En ajoutant "2>&1" à la ligne de commande tu constateras dans ton log pourquoi ça coince (et je suis prêt à parier que le message d'erreur va être "sh: python2.6: not found")

  • Je te conseille de plutôt passer par un script shell intermédiaire "autosuffisant" pour exécuter ta commande. Définis dans ce dernier la valeur de PATH appropriée, quelque chose comme:

    #!/bin/sh
    PATH=/opt/bin:/bin:/usr/bin
    python2.6 /volume1/@choses/gandyn/filemoi-ca.py
    
  • dans la crontab c'est le chemin de ce script que tu mettras
Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup pour ta réponse, ça m'aide mais apporte aussi quelques questions.

  • python2.6 pas dans le PATH. Ok, est-ce que mettre le chemin asbolu vers python (/opt/bin/python2.6) dans ma cron au lieu de python2.6 ne résoudrait pas tous mes problèmes ?
  • mon script python (dont je ne suis pas l'auteur) commence par ce qui suit :
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import xmlrpclib, urllib2, time, re, sys

Faut-il (aussi) que je rajoute PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin en deuxième ligne ? ou que je change remplace la première ligne par ce long PATH ?

Enfin, par rapport à 2>&1, tu dis qu'il faut que je le rajoute à ma commande cron. Ok mais où ? avant ou après le >> ?

J'ai aussi vu que, pour redémarrer le service cron, on avait conseillé ici sur le forum de rajouter "env - " devant /usr/syno/etc/rc.d/S04crond.sh stop.

Est-ce que si je mets "env - python2.6 /volume1/@choses/gandyn/filemoi-ca.py" ça ne fonctionnerait pas ?

Modifié par Amsonia
Lien vers le commentaire
Partager sur d’autres sites

python2.6 pas dans le PATH. Ok, est-ce que mettre le chemin asbolu vers python (/opt/bin/python2.6) dans ma cron au lieu de python2.6 ne résoudrait pas tous mes problèmes ?

Ca dépend, je ne sais pas quels sont tes *autres* problèmes mais pour le script qui ne s'exécute pas mais en effet ça serait suffisant.

mon script python (dont je ne suis pas l'auteur) commence par ce qui suit :

#!/usr/bin/python 
# -*- coding: UTF-8 -*- 
import xmlrpclib, urllib2, time, re, sys 

Faut-il (aussi) que je rajoute PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin en deuxième ligne ? ou que je change remplace la première ligne par ce long PATH ?

Non, et en plus la syntaxe "PATH=..." est une syntaxe shell, python ne la comprendrait pas.

Si tu veux tout savoir, la ligne qui commence par "#!" permet d'exécuter le script directement, en tant que *commande*.

Par exemple, en remplacant cette ligne par

#! /opt/bin/python2.6

et en le rendant le script python ("filemoi-ca.py") exécutable (chmod +x), le script de lancement (ou la ligne de crontab) pourra se contenter de contenir la ligne:

/volume1/@choses/gandyn/filemoi-ca.py

sans le prefixe "python2.6"

Enfin, par rapport à 2>&1, tu dis qu'il faut que je le rajoute à ma commande cron. Ok mais où ? avant ou après le >> ?

Complètement à la fin de la ligne, après le chemin du fichier log, cemme cela:

> fichier_log 2>&1

J'ai aussi vu que, pour redémarrer le service cron, on avait conseillé ici sur le forum de rajouter "env - " devant /usr/syno/etc/rc.d/S04crond.sh stop.

Est-ce que si je mets "env - python2.6 /volume1/@choses/gandyn/filemoi-ca.py" ça ne fonctionnerait pas ?

"env -" sert à démarrer la commande qui suit avec un environnement minimum.

Dans le cas du redémarrage du cron, ça sert a s'assurer, lorsque'on le redémarre, que ce service s'exécute dans le même contexte que celui qu'il recoit lorsqu'il est exécuté au démarrage du syno.

Ce n'est pas notre problème ici.

Lien vers le commentaire
Partager sur d’autres sites

Merci pour tout, j'ai bien appris, tu m'as beaucoup aidé !

Mes "autres" problèmes étaient en fait exactement la même chose mais sur d'autres domaines, un seul problème donc.

J'ai finalement choisi l'option de mettre le chemin réel vers python (/opt/bin/python2.6) en entête de mes scripts.

Merci pour les explications sur les autres solutions, je garde ça en mémoire pour l'avenir ;)

Et merci aussi pour cette explication courte, simple et néanmoins efficace du "env - " ;-)

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.