GNU/Linux >> Tutoriels Linux >  >> Linux

Comment faire en sorte que CRON appelle les bons PATH

Très probablement, cron s'exécute dans un environnement très clairsemé. Vérifiez les variables d'environnement que cron utilise en ajoutant une tâche factice qui vide env dans un fichier comme celui-ci :

* * * * * env > env_dump.txt

Comparez cela avec la sortie de env dans une session shell normale.

Vous pouvez ajouter vos propres variables d'environnement à la crontab locale en les définissant en haut de votre crontab.

Voici une solution rapide pour ajouter $PATH à la crontab actuelle :

# echo PATH=$PATH > tmp.cron
# echo >> tmp.cron
# crontab -l >> tmp.cron
# crontab tmp.cron

Le crontab résultant ressemblera à la réponse de chrissygormley, avec PATH défini avant les règles du crontab.


Vous devriez mettre des chemins complets dans votre crontab . C'est l'option la plus sûre.
Si vous ne voulez pas faire cela, vous pouvez mettre un script wrapper autour de vos programmes et y définir le PATH.

ex.

01 01 * * * command

devient :

01 01 * * * /full/path/to/command

Aussi tout ce qui est appelé depuis cron devrait faire très attention aux programmes qu'il exécute et définir probablement son propre choix pour le PATH variables.

MODIFIER :

Si vous ne savez pas où se trouve la commande que vous voulez exécuter which <command> de votre shell et il vous indiquera le chemin.

EDIT2 :

Ainsi, une fois que votre programme est en cours d'exécution, la première chose qu'il doit faire est de définir PATH et toute autre variable requise (par exemple LD_LIBRARY_PATH ) aux valeurs requises pour l'exécution du script.
Fondamentalement, au lieu de penser à modifier l'environnement cron pour le rendre plus adapté à votre programme/script, faites en sorte que votre script gère l'environnement qui lui est donné, en définissant un environnement approprié au démarrage.


J'ai utilisé /etc/crontab . J'ai utilisé vi et entré dans les chemins dont j'avais besoin dans ce fichier et l'a exécuté en tant que root. La crontab normale écrase les PATH que vous avez configurés. Un bon tutoriel sur la façon de procéder.

Le fichier cron à l'échelle du système ressemble à ceci :

This has the username field, as used by /etc/crontab.
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user   command
42 6 * * *   root    run-parts --report /etc/cron.daily
47 6 * * 7   root    run-parts --report /etc/cron.weekly
52 6 1 * *   root    run-parts --report /etc/cron.monthly
01 01 * * 1-5 root python /path/to/file.py

Linux
  1. Comment planifier des tâches Cron avec Crontab

  2. Comment exécuter une tâche cron certains jours de la semaine

  3. Comment obtenir la taille de tar.gz dans le fichier (Mo) en python

  4. Comment obtenir le statut de sortie d'une boucle dans bash

  5. Comment obtenir l'ID de processus pour tuer un processus nohup ?

Comment automatiser des tâches sous Linux à l'aide de Crontab

Comment obtenir la taille d'un répertoire sous Linux

Comment tirer le meilleur parti de Qmmp 1.0

Comment obtenir en toute sécurité la version de Ksh ?

Comment fonctionnent les composants internes du démon Cron ?

Comment obtenir la bonne disposition de clavier espagnol ?