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.