Come impostare cron PATH a livello globale (cioè per tutti gli utenti) in modo permanente?


10

Dobbiamo avere / usr / local / bin nel percorso di cron per tutti gli utenti. C'è un modo per impostarlo a livello di sistema, senza la necessità di modificare il crontab di ogni singolo utente?

Abbiamo provato ad aggiungere PATH a / etc / crontab:

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

Ma quando gli utenti hanno questo nel loro crontab:

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

... rivela che il loro percorso è ancora impostato come predefinito:

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

2
Suggerimento generale: scrivere "non ha funzionato" di solito non ti darà una risposta utile. Descrivi sempre come esattamente non ha funzionato, cioè esattamente cosa hai fatto e quale è stato esattamente il risultato.
sleske,

Risposte:


4

Puoi configurare il tuo PERCORSO nel file di configurazione crontab come mostrato nel primo codice tranne lì . Prima specificare le variabili env, quindi specificare i lavori.

UPD: a causa del fatto che il collegamento è interrotto, ecco un estratto:

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
non funziona su Ubuntu, anche dopo aver riavviato cron
grosser il

1
@grosser: Beh, dovrebbe. Pubblica il tuo crontab completo (modifica la tua risposta), insieme all'output che produce e al motivo per cui ritieni che non funzioni. Poi vedremo ...
sleske,

Si noti inoltre che il formato delle righe di valore VARIABLE = è in qualche modo più limitato rispetto a uno script di shell: ogni assegnazione deve essere su una riga a sé stante e non è possibile utilizzare le variabili sul lato destro (ad esempio PATH = $ PERCORSO: / bla non funzionerà).
sleske,

ho aggiornato la domanda, impostando il PERCORSO in un singolo crontab ha funzionato, solo il cambiamento globale non ha funzionato
grosser

Prova a specificare le variabili PATH in ogni crontab dove ne hai bisogno. Probabilmente è fatto a causa di problemi di sicurezza. A proposito, in Ubuntu (ho controllato) PATH è definito in / etc / crontab e /etc/cron.d/anacron in Ubuntu. Quindi sembra che non sia ereditato da / etc / crontab. Prova a definirlo in root's crontab ( sudo crontab -e)
igorp1024,


1

Non sono riuscito a trovare una soluzione neanche per questo. La più vicina a una soluzione decente è la seguente (tratta da https://raymii.org/s/tutorials/Better_cron_env_and_shell_control_with_the_SHELL_variale.html ).

  • Cambia la shell per il tuo lavoro cron e punta a uno script bash. Cioè, nella parte superiore del cronjob, aggiungi: SHELL=/path/to/setup/cron.bash
  • In questo script di shell, carica le variabili di ambiente e specifica altri parametri. Assicurati di includere le seguenti 4 righe in alto. Reimposta la variabile SHELL su bash ed esegue una shell bash per eseguire i cronjobs.

Per esempio:

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

Unico inconveniente: questo richiede di specificare la SHELL=...parte superiore di ogni cronjob. Upside: utilizzerai le normali variabili di ambiente e non dovrai preoccuparti di mantenere coerenti le variabili tra cron e gli altri


0

Se riesci ad essere root, puoi provare a modificare /etc/init.d/crone cambiare il PERCORSO lì? Non l'ho provato, ma sarebbe interessante verificarlo.


non sembrano funzionare, ho solo aggiunto PATH = xxx in /etc/init.d/cron ma il * * * * * echo $ PATH uscita era lo stesso
Grosser
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.