Comment définir cron PATH globalement (c'est-à-dire pour tous les utilisateurs) de façon permanente?


10

Nous devons avoir / usr / local / bin dans le chemin de cron pour tous les utilisateurs. Existe-t-il un moyen de le définir à l'échelle du système, sans avoir besoin de modifier la crontab de chaque utilisateur individuel?

Nous avons essayé d'ajouter PATH à / etc / crontab:

# grep PATH /etc/crontab
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Mais lorsque les utilisateurs ont ceci dans leur crontab:

$ crontab -l | grep PATH
* * * * * echo $PATH > /tmp/current_cron_path

... cela révèle que leur chemin est toujours défini par défaut:

$ cat /tmp/current_cron_path
/usr/bin:/bin

2
Conseil général: écrire "ça n'a pas fonctionné" ne vous donnera généralement pas de réponse utile. Décrivez toujours comment cela n'a pas fonctionné exactement , c'est-à-dire exactement ce que vous avez fait et quel a été exactement le résultat.
— sleske

Réponses:


4

Vous pouvez configurer votre PATH dans le fichier de configuration crontab comme indiqué dans le premier code, sauf là . Spécifiez d'abord les variables env, puis spécifiez les travaux.

UPD: En raison du fait que le lien est rompu, voici un extrait:

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

1
ne fonctionne pas sur ubuntu, même après le redémarrage de cron
— grosser

1
@grosser: Eh bien, ça devrait. Veuillez publier votre crontab complet (modifier votre réponse), ainsi que le résultat qu'il produit et pourquoi vous pensez que cela ne fonctionne pas. Ensuite, nous verrons ...
— sleske

Notez également que le format des lignes de valeur VARIABLE = est un peu plus restreint que dans un script shell: chaque affectation doit être sur une ligne qui lui est propre, et vous ne pouvez pas utiliser de variables sur le côté droit (par exemple PATH = $ CHEMIN: / bla ne fonctionnera pas).
— sleske

i mis à jour la question, la définition du chemin dans un crontab individuel fait le travail, juste le changement global n'a pas fonctionné
— grosser

Essayez de spécifier les variables PATH dans chaque crontab où vous en avez besoin. Cela est probablement dû à des problèmes de sécurité. BTW, dans ubuntu (j'ai vérifié) PATH est défini dans / etc / crontab et /etc/cron.d/anacron dans ubuntu. Il semble donc qu'il ne soit pas hérité de / etc / crontab. Essayez de le définir dans le crontab de root ( sudo crontab -e)
— igorp1024


1

Je n'ai pas non plus pu trouver de solution à cela. Le plus proche d'une solution décente est le suivant (extrait de https://raymii.org/s/tutorials/Better_cron_env_and_shell_control_with_the_SHELL_variale.html ).

  • Modifiez le shell de votre tâche cron et pointez-le vers un script bash. C'est-à-dire, en haut du cronjob, ajoutez: SHELL=/path/to/setup/cron.bash
  • Dans ce script shell, chargez les variables d'environnement et spécifiez d'autres variables. Assurez-vous d'inclure les 4 lignes suivantes en haut. Il réinitialise la variable SHELL à bash et exécute un shell bash pour exécuter les cronjobs.

Par exemple:

#!/bin/bash
set -e

source /etc/environment
source /etc/profile
# restore SHELL env var for cron
SHELL=/bin/bash

# execute the cron command in an actual shell
exec /bin/bash --norc "$@"

Inconvénient: cela vous oblige à spécifier SHELL=...le haut de chaque cronjob. À l'envers: vous utiliserez des variables d'environnement régulières, et vous n'aurez pas à vous soucier de garder les variables cohérentes entre cron et les autres


0

Si vous êtes capable d'être root, pouvez-vous essayer d'éditer /etc/init.d/cronet de changer le CHEMIN là-bas? Je n'ai pas testé cela, mais il serait intéressant de vérifier.


ne semble pas fonctionner, je viens d'ajouter PATH = xxx dans /etc/init.d/cron mais la sortie * * * * * echo $ PATH était la même
— grossier
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.