Ho pianificato il mio lavoro di eseguire tutti i giorni alle 12:30 con questo comando:
30 12 * * * java -jar test.jar
Genera errore:
/bin/sh: 1: java: not found
Ho provato a eseguire questo comando: java -jar test.jar
da shell e ha funzionato bene.
Ora non capisco, direi che sta succedendo perché JAVA_HOME
la variabile d'ambiente non è impostata, ma perché funziona dalla shell?
risposte:
1 per risposta № 1L'errore ti dice che la shell non è in grado di localizzare il file java
binario da eseguire. Questo non ha nulla a che fare con il JAVA_HOME
variabile di ambiente, ma con il PATH
variabile consultata da sh
per trovare qualsiasi comando.
Quando esegui il tuo compito da cron
, la shell non ha ricevuto la stessa inizializzazione della shell interattiva in cui il comando funziona per te. Lo troverai ugualmente JAVA_HOME
neanche lì.
1 per risposta № 2
Il tuo ambiente di shell di login è diverso da quello del tuo cronjob. Uso env
per stampare il tuo ambiente.
Controlla il percorso su entrambi - All'interno di cron (qualcosa di simile)
30 08 * * * env > ~/cronenv
. Nella tua shell di login basta usare env
. Quindi confrontare le variabili PATH. Come @Marko Topolnik ha già dichiarato che il tuo PATH all'interno di cron ovviamente non contiene i tuoi eseguibili java.
0 per risposta № 3
Puoi aggiungere una riga nel tuo file crontab che contiene il percorso di cui hai bisogno:
# m h dom mon dow command
PATH=.....
Probabilmente hai bisogno di qualcosa del genere:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Puoi anche usare echo $PATH
per scoprire cosa hai nel tuo ambiente normale e semplicemente utilizzare quel valore.