GNU/Linux >> Linux Esercitazione >  >> Linux

Cron Script non viene eseguito come previsto da crontab – Risoluzione dei problemi

Il problema

Esecuzione di uno script utilizzando il servizio cron, che viene eseguito normalmente dalla shell ma non mostra lo stesso comportamento durante l'esecuzione da crontab.

Causa principale

Una delle cause più frequenti per cui il lavoro crontab non viene eseguito correttamente è che un lavoro cron non viene eseguito nell'ambiente shell dell'utente. Un altro motivo può essere:non specificare il percorso assoluto dei comandi utilizzati nello script. Quando lo script viene eseguito manualmente, la variabile di ambiente come PATH può essere diversa da quando viene eseguito da cron. Quindi è sempre consigliabile includere nello script i percorsi assoluti dei comandi utilizzati.

Per questo motivo, tutte le variabili di ambiente per l'utente presenti in una normale shell non saranno disponibili durante l'esecuzione del lavoro cron a meno che non siano importate dallo script in modo esplicito.

Ad esempio, se la shell ha una variabile ORACLE_HOME definita e la include nella variabile d'ambiente PATH e lo script utilizza tali variabili, lo script verrà eseguito nella vendita, ma quando viene eseguito da crontab lo script non avrà alcuna conoscenza di tali variabili per impostazione predefinita.

La soluzione

Definisci o importa ORACLE_HOME e la variabile PATH completa nel file di script cron, come puoi vedere all'interno della shell utente di Oracle (oracle_user_shell> echo $PATH).

Una buona pratica è importare sempre l'ambiente utente all'inizio dello script script.sh con il comando:

#!/bin/bash
. /home/oracle/.bashrc
[rest of script]

Questo leggerà /home/oracle/.bashrc e importerà l'ambiente all'interno. A seconda dell'ambiente dell'utente, può anche essere /home/oracle/.bash_profile o altri file.

NOTA :C'è uno spazio tra il punto “.” e "/casa.."

SUGGERIMENTO :per risolvere meglio l'esecuzione di una voce crontab, puoi modificarla per registrare l'output in un file, ad esempio:

[* * * * *] /home/oracle/script.sh 2> /tmp/crontab_script_log.txt 2>&1

Nota :Sostituisci [* * * * *] con i tempi di esecuzione corretti per il tuo caso.

È quindi possibile controllare /tmp/crontab_script_log.txt per l'output dell'esecuzione. Se qualche variabile non è definita o se lo script presenta altri errori, l'output renderà più facile trovare la causa del problema.


Linux
  1. Bashscript funziona da Terminal ma non da Crontab?

  2. Il comando Rm nello script Bash non funziona con la variabile?

  3. Cron Job non viene eseguito?

  4. Problema Crontab:Cron Job non funziona quando si utilizza la percentuale

  5. file di creazione atomico se non esiste dallo script bash

Esegue lo script bash dall'URL

Esegui lo script Python tramite crontab

Imposta ip statico se non ottenuto da DHCP (script)

Come eseguire lo script Python da Java?

Esegui uno script di shell ogni giorno in un momento specifico

La corrispondenza del modello non funziona nello script bash