"comando non trovato" durante l'esecuzione di uno script tramite cron

22

Voglio eseguire il mio script in crontab, ma ho alcuni problemi ...

Nel mio script eseguo questo comando:

db2 connect to myDB2

Funziona bene quando eseguo questo come utente db2inst1 , ma quando eseguo questo script in db2inst1 crontab , ottengo questo:

  

db2: comando non trovato.

Come posso risolvere questo?

    
posta Wolfy 09.06.2011 - 11:15

3 risposte

35

Per evitare di dover digitare il percorso assoluto di un comando, le shell hanno introdotto la variabile di ambiente $PATH , ciascuna directory è separata da : e le ricerche vengono eseguite da sinistra a destra. cron cancella spesso l'intero ambiente, inclusa questa variabile $PATH . Pertanto, lo script potrebbe comportarsi diversamente nel cron rispetto al comportamento nella shell.

Usa percorsi assoluti

Esegui which db2 come db2inst1 utente per ottenere il percorso completo per il programma db2 . Se l'output è /usr/bin/db2 , il tuo comando cron sarà simile a:

/usr/bin/db2 connect to myDB2

Imposta la variabile PATH

Esegui echo "$PATH" come db2inst1 utente per ottenere la variabile $PATH e assicurati che questa variabile sia disponibile anche nello script cron. Ad esempio, se l'output era /usr/local/bin:/usr/bin:/bin , inseriresti la riga successiva nella parte superiore dello script della shell:

export PATH="/usr/local/bin:/usr/bin:/bin"
    
risposta data Lekensteyn 09.06.2011 - 11:18
3

Devi definire cosa sono db2 e myDB2 , altrimenti usa la posizione assoluta di " file " o " applicazione 'che vuoi eseguire.

Esempio:

/bin/rm /home/ubuntu/a.txt
    
risposta data Mahmudin Ashar 09.06.2011 - 13:42
1

Come risposta nel link , devi impostare PATH nello script della shell:

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"

# rest of script follows

o nel file crontab, che si applicherà a tutti i lavori cron:

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2
    
risposta data Linh Dam 06.08.2018 - 11:24

Leggi altre domande sui tag