2010-02-08 7 views
6

Ho provato ad esportare i miei percorsi e variabili e crontab continua a non eseguire il mio script. Sono sicuro che sto facendo qualcosa di sbagliato.script di shell non in esecuzione tramite crontab, funziona perfettamente manualmente

Ho uno script di shell che esegue un file jar. Questo non funziona correttamente.

Dopo aver letto in giro ho letto questo è comunemente dovuto a percorsi errati a causa di cron in esecuzione tramite la propria istanza di shell e quindi non ha le stesse impostazioni di configurazione come il mio profilo.

Ecco quello che il mio script appare come oggi, dopo diverse modifiche:

#!/bin/bash -- 

. /root/.bash_profile 

/usr/bin/java -jar Pharmagistics_auto.jar -o 

... 

questi sono i pezzi più importanti dello script, il resto sono semplici shell basata.

Qualcuno può dirmi che cosa sto facendo male?

+3

Perché si sta utilizzando un percorso relativo per il binario java anziché un percorso assoluto? – jamessan

+0

probabilmente più appropriato per serverfault o superuser –

+0

Mi dispiace per essere un po 'fuori mano con il mio uso' nix. Come potrei scoprire il percorso assoluto del mio eseguibile java? "whereis java" non conta? Penso che potresti riferirti al mio errore di battitura di usr/bin/java. Da allora ho rettificato questo. Se questo non è ciò che intendevi, per favore fammelo sapere e lo aggiusterò. – astro

risposta

13

provare a specificare il percorso completo del file jar:

/usr/bin/java -jar /path/to/Pharmagistics_auto.jar -o 
+1

Ho appena fatto uno schiaffo sulla fronte su quello. Buona cattura, grazie per l'aiuto Dennis che ha risolto il problema. Lo apprezzo davvero! – astro

3

Vorrei solo dirti cosa hai già escluso: controlla il tuo percorso e l'ambiente.

Dato che hai già finito, avvia il debug. Come posti di blocco di scrittura in un file di log per vedere fino a che punto lo script ottiene (se ancora iniziato a tutti), controllare il file di registro cronjob per gli errori, controllare la posta (cron manda mail su errori) e così via ...

Non molto specifico, mi dispiace.

+0

Ho provato MAILTO = myemail ma per qualche motivo non ho ricevuto email. Ho anche controllato cron logs/var/log/cron e sembra che stia eseguendo lo script, ma non la parte java di esso. – astro

1

Alcuni pensieri.

  1. Rimuovere il -- dopo la #!/bin/bash
  2. Assicurati di output dello script diretta visto da cron per posta o da qualche altra parte dove è possibile vederlo (ad esempio mailto = desiredUser)
  3. Verificare che lo script è in esecuzione e non bloccato da uno script di lunga durata diversa (ad esempio, sulla seconda riga, aggiungere touch /tmp/MY_SCRIPT_RAN && exit)
  4. debug lo script utilizzando set -x e set -v una volta che sai che è effettivamente in esecuzione
+0

1. Ho rimosso il -, per notare ho anche provato ad aggiungere -l senza risultato. 2. MAILTO per qualche motivo non mi sta inviando alcuna email, non sono sicuro del motivo per cui questo sarebbe il caso.Ho aggiunto [email protected] proprio prima del mio vero testo cronjob e quando ho crontato cron.txt cront è digerito bene ma ancora non ha email. 3. il mio script è in esecuzione e sta eseguendo bene i comandi della shell, è solo la porzione java che non sta eseguendo, ma non mi lancia alcun errore. 4. cosa intendi qui? impostare qualcosa prima e dopo le porzioni di codice di cui sono discutibile? – astro

+0

@astro - RE # 2 - impostalo su un account utente sul computer locale, RE # 3 - Grazie per aver chiarito. RE # 4 - Aggiungendo il comando 'set -x' allo script, bash mostrerà cosa sta eseguendo. 'set -v' fornisce ulteriori informazioni sulla valutazione e l'espansione dei comandi. –

+0

2. Non sono sicuro che le e-mail siano state impostate per questa casella, purtroppo. 4. Ho aggiunto il set -v alla sceneggiatura e ancora senza fortuna. Non ho assolutamente niente. Ho cambiato lo script in/usr/bin/java -jar Pharmigistics.jar -o> javalog.txt e javalog è sempre vuoto. Non vedo alcun messaggio di errore da nessuna parte, il file/var/log/cron mi dice che sta già eseguendo il mio script, che una parte del mio script semplicemente non fa nulla. – astro

2

"export my paths and variables" non funzionerà poiché crontab viene eseguito in una shell diversa da un utente diverso.

Inoltre, non so se questo è un errore di battitura nel modo in cui hai inserito il domanda, ma vedo:

usr/bin/java

... e non posso fare a meno di notare che si' non specificare il percorso completo. Sta cercando una directory chiamata "usr" nella directory di lavoro corrente. Oft times per crontab, il cwd non è definito, quindi il tuo riferimento non va da nessuna parte.

Prova a specificare il percorso completo dalla radice, in questo modo:

/usr/bin/java

Oppure, se si vuole vedere un esempio di pathing relativa in azione, si potrebbe anche provare:

cd /

usr/bin/java

+0

che era un errore di battitura, grazie per averlo indicato. – astro

0

si fa a definire i percorsi necessari e ENV Vars nel vostro .profile personale (o altro script)? Hai provato a procurarti quel particolare file (o è quello che stai facendo già con /root/.bash_profile?)

Un altro modo di chiedere questo è: sei sicuro che i percorsi e gli oggetti necessari che ti aspetti siano effettivamente a disposizione?

Se non altro, hai provato a echeggiare valori individuali o semplicemente usando il comando "env" nel tuo script e quindi rivedere lo stdout?

+0

Credo di aver trovato il file con il '. /root/.bash_profile 'comando. Non sono sicuro, ma ho eseguito un cronjob e ho eseguito un file env> conEnv.txt e poi ho confrontato i risultati con i miei risultati del comando env. I risultati erano ovviamente percorsi di esportazione molto diversi, quindi ho provato ad aggiungere il seguente invece del '. /root/.bash_profile 'parte: PATH = ... [i miei ambienti qui copiati/incollati dai risultati dell'esecuzione di env con il mio profilo utente] ..; esportazione PATH; e anche questo non ha funzionato. – astro

0

forniscono percorsi completi al file jar, e ciò che l'utente sono in esecuzione il crontab in? Se lo configuri per un utente normale, pensi che quell'utente abbia il permesso di creare il profilo della root?

Problemi correlati