¿Cómo establecer cron PATH globalmente (es decir, para todos los usuarios) de forma permanente?


10

Necesitamos tener / usr / local / bin en la ruta de cron para todos los usuarios. ¿Hay alguna manera de configurarlo en todo el sistema, sin necesidad de editar el crontab de cada usuario individual?

Intentamos agregar PATH a / etc / crontab:

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

Pero cuando los usuarios tienen esto en su crontab:

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

... revela que su ruta todavía está configurada por defecto:

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

2
Sugerencia general: escribir "no funcionó" generalmente no le dará una respuesta útil. Siempre describa exactamente cómo no funcionó, es decir, qué hizo exactamente y cuál fue exactamente el resultado.
sleske

Respuestas:


4

Puede configurar su RUTA en el archivo de configuración crontab como se muestra en el primer código, excepto allí . Primero especifique las variables env, luego especifique los trabajos.

UPD: Debido al hecho de que el enlace está roto, aquí hay un extracto:

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
no funciona en ubuntu, incluso después de reiniciar cron
Grosser

1
@grosser: Bueno, debería. Publique su crontab completo (edite su respuesta), junto con la salida que produce y por qué cree que no funciona. Entonces veremos ...
sleske

También tenga en cuenta que el formato de las líneas VARIABLE = value es algo más restringido que en un script de shell: cada asignación debe estar en una línea propia, y no puede usar variables en el lado derecho (por ejemplo, PATH = $ RUTA: / bla no funcionará).
sleske

He actualizado la cuestión, establecer la ruta en un crontab individuales no hizo el trabajo, sólo el cambio global no funcionó
Grosser

Intente especificar las variables PATH en cada crontab donde lo necesite. Probablemente se hace debido a problemas de seguridad. Por cierto, en ubuntu (lo he comprobado) PATH se define en / etc / crontab y /etc/cron.d/anacron en ubuntu. Parece que no se hereda de / etc / crontab. Solo intenta definirlo en el crontab de root ( sudo crontab -e)
igorp1024


1

Tampoco pude encontrar una solución para esto. Lo más cerca que llegué a una solución decente es lo siguiente (tomado de https://raymii.org/s/tutorials/Better_cron_env_and_shell_control_with_the_SHELL_variale.html ).

  • Cambie el shell para su trabajo cron y apúntelo a un script bash. Es decir, en la parte superior del cronjob, agregue: SHELL=/path/to/setup/cron.bash
  • En este script de shell, cargue las variables de entorno y especifique otros vars. Asegúrese de incluir las siguientes 4 líneas en la parte superior. Restablece la variable SHELL a bash y ejecuta un shell bash para ejecutar los cronjobs.

Por ejemplo:

#!/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 "$@"

Desventaja: esto requiere que especifique el SHELL=...en la parte superior de cada cronjob. Al revés: usará variables de entorno regulares y no tendrá que preocuparse por mantener variables consistentes entre cron y otros


0

Si puede ser root, ¿puede intentar editar /etc/init.d/crony cambiar la RUTA allí? No he probado esto, pero sería interesante verificarlo.


no parecía funcionar, simplemente agregué PATH = xxx en /etc/init.d/cron pero la salida * * * * * echo $ PATH fue la misma
más
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.