GNU/Linux >> Linux Esercitazione >  >> Linux

Come fare in modo che CRON chiami nei PERCORSI corretti

Molto probabilmente, cron è in esecuzione in un ambiente molto scarso. Controlla le variabili d'ambiente che cron sta usando aggiungendo un lavoro fittizio che scarica env in un file come questo:

* * * * * env > env_dump.txt

Confrontalo con l'output di env in una normale sessione di shell.

Puoi anteporre le tue variabili di ambiente al crontab locale definendole nella parte superiore del tuo crontab.

Ecco una soluzione rapida per anteporre $PATH al crontab corrente:

# echo PATH=$PATH > tmp.cron
# echo >> tmp.cron
# crontab -l >> tmp.cron
# crontab tmp.cron

Il crontab risultante sarà simile alla risposta di chrissygormley, con PATH definito prima delle regole del crontab.


Dovresti inserire percorsi completi nel tuo crontab . Questa è l'opzione più sicura.
Se non vuoi farlo, puoi inserire uno script wrapper attorno ai tuoi programmi e impostare il PERCORSO lì dentro.

ad esempio

01 01 * * * command

diventa:

01 01 * * * /full/path/to/command

Anche qualsiasi cosa chiamata da cron dovrebbe stare molto attento ai programmi che esegue, e probabilmente impostare la propria scelta per il PATH variabile.

MODIFICA:

Se non sai dove si trova il comando che vuoi eseguire which <command> dal tuo guscio e ti dirà il percorso.

EDIT2:

Quindi, una volta che il programma è in esecuzione, la prima cosa da fare è impostare PATH e qualsiasi altra variabile richiesta (ad es. LD_LIBRARY_PATH ) ai valori richiesti per l'esecuzione dello script.
Fondamentalmente, invece di pensare a come modificare l'ambiente cron per renderlo più adatto al tuo programma/script, fai in modo che il tuo script gestisca l'ambiente che gli viene fornito, impostandone uno appropriato all'avvio.


Ho usato /etc/crontab . Ho usato vi e ho inserito i PERCORSI di cui avevo bisogno in questo file e l'ho eseguito come root. Il normale crontab sovrascrive i PERCORSI che hai impostato. Un buon tutorial su come farlo.

Il file cron a livello di sistema ha questo aspetto:

This has the username field, as used by /etc/crontab.
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user   command
42 6 * * *   root    run-parts --report /etc/cron.daily
47 6 * * 7   root    run-parts --report /etc/cron.weekly
52 6 1 * *   root    run-parts --report /etc/cron.monthly
01 01 * * 1-5 root python /path/to/file.py

Linux
  1. Come usare cron su Linux

  2. Come ottenere la chiave USB per il montaggio automatico?

  3. Come funzionano gli interni del demone Cron?

  4. Come eseguire un processo cron in giorni specifici della settimana

  5. Come ottenere lo stato di uscita un ciclo in bash

Come automatizzare le attività in Linux usando Crontab

Come ottenere la dimensione di una directory in Linux

Come ottenere il massimo da Qmmp 1.0

Come ottenere il layout corretto della tastiera spagnola?

Come ottengo la directory assoluta di un file in bash?

Come ottengo il mio indirizzo IP dalla riga di comando?