¿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
más asqueroso
fuente
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
Tenga en cuenta que confiar echoen su cron posiblemente no sea confiable .
Der Hochstapler

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
igorp1024
fuente
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

Laurens Rietveld
fuente
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.

Rich Homolka
fuente
no parecía funcionar, simplemente agregué PATH = xxx en /etc/init.d/cron pero la salida * * * * * echo $ PATH fue la misma
más