2010-08-13 15 views
79

Devo impostare un cron job che esegua un eseguibile compilato usando gcc una volta ogni ora.Come impostare un cron job per eseguire un eseguibile ogni ora?

mi sono collegato come root e digitato crontab -e

Poi ho inserito la seguente e salvato il file.

0 * * * * /path_to_executable 

Tuttavia, il lavoro cron non funziona.

Vedo che quando digito /...path_to_executable viene visualizzato un errore di segmentazione. Posso solo eseguire l'eseguibile dalla cartella in cui si trova. C'è un modo per risolvere questo problema?

+5

Questo è un titolo cattivo. Sai come impostare il cron job; quello che vuoi sapere è come far funzionare il comando. –

+5

appartiene a superuser.com (non direttamente correlato alla programmazione) – Philipp

+3

Titolo errato, ma è così che ho trovato la soluzione. –

risposta

130
0 * * * * cd folder_containing_exe && ./exe_name 

dovrebbe funzionare a meno che non vi sia qualcos'altro che deve essere configurato per l'esecuzione del programma.

+9

usa && invece di;, altrimenti possono accadere cose interessanti (specialmente se usate con rm) – Reactormonk

+2

Hai ragione. && è molto meglio se esiste una possibilità che il cd target non esista (per esempio se il file diretory si trova su un server NFS che si trova inattivo). – joast

-1

uso

path_to_exe >> log_file 

per vedere l'output del comando anche gli errori possono essere reindirizzati con

path_to_exe &> log_file 

inoltre è possibile utilizzare

crontab -l

per verificare che il vostro le modifiche vengono salvate

+0

crontab -l mostra il processo cron quando accedo come root. Ho provato il file_log ma è vuoto. – Anonymous

1

Dal momento che non potevo correre il C eseguibile in quel modo, ho scritto un semplice shell script che fa la seguente

cd /..path_to_shell_script 
./c_executable_name 

Nell'elenco cron jobs, che io chiamo lo script di shell.

1

Intendevi che l'eseguibile non viene eseguito, se richiamato da un'altra directory? Questo è piuttosto un bug nell'eseguibile. Un potenziale motivo potrebbe essere l'eseguibile richiede alcune libraires condivise dalla cartella installata. È possibile controllare la variabile di ambiente LD_LIBRARY_PATH

4

Il modo corretto per risolvere questo è scoprire perché si sta verificando l'errore di segmentazione e risolverlo.

3

È anche possibile utilizzare @hourly istante di 0 * * * *

+0

curioso di questa soluzione, in quale minuto fa @ourly implica 0? – ojblass

+1

@ojblass '@ hourly' è un sinonimo esatto di' 0 * * * * ', non c'è differenza. –