"Comando non trovato" quando si esegue uno script tramite cron


29

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 crontab db2inst1 , ottengo questo:

db2: comando non trovato.

Come posso risolvere questo?

Risposte:


43

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

Usa percorsi assoluti

Esegui which db2come db2inst1utente per ottenere il percorso completo per il db2programma. Se l'output è /usr/bin/db2, il tuo comando cron sarebbe simile a:

/usr/bin/db2 connect to myDB2

Imposta la variabile PATH

Esegui echo "$PATH"come db2inst1utente per ottenere la $PATHvariabile e assicurarsi che questa variabile sia disponibile anche nel tuo script cron. Ad esempio, se l'output fosse /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"

8

Come indicato in /ubuntu//a/23438/227839 , è necessario impostare PATHlo 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

Grazie, è stato utile!
Yamashiro Rion,

3

È necessario definire cosa sono db2 e myDB2 , altrimenti utilizzare la posizione assoluta di ' file ' o ' applicazione ' che si desidera eseguire.

Esempio:

/bin/rm /home/ubuntu/a.txt
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.