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
plus grossier
la source
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
Veuillez noter que compter sur echovotre cron n'est peut-être pas fiable .
Der Hochstapler

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
igorp1024
la source
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
3

La définition de la variable PATH devrait fonctionner dans Ubuntu, comment dites-vous que cela ne fonctionne pas?

Voir # 14: Linux Crontab: 15 exemples impressionnants de tâches Cron

le geek
la source
j'ai mis à jour la question, en définissant le CHEMIN dans un crontab individuel a fonctionné, juste le changement global n'a pas fonctionné
grossier
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

Laurens Rietveld
la source
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.

Rich Homolka
la source
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