Come impostare un cron job per eseguire un eseguibile ogni ora?


94

Ho bisogno di impostare un cron job che esegua un eseguibile compilato utilizzando gcc una volta ogni ora.

Ho effettuato l'accesso come root e ho digitato crontab -e

Quindi ho inserito quanto segue e ho salvato il file.

0 * * * *  /path_to_executable

Tuttavia, il cron job non funziona.

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


8
Questo è un brutto titolo. Sai come impostare il cron job; quello che vuoi sapere è come far funzionare il comando.
David Thornley

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

3
Titolo sbagliato, ma è così che ho trovato la soluzione.
Roman Holzner

Il tuo eseguibile è probabilmente avviato. Consiglio di usare syslog (3) al suo interno (e almeno di creare un messaggio di log all'inizio, per essere sicuro che sia avviato).
Basile Starynkevitch

Risposte:


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

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


11
usa && invece di;, altrimenti potrebbero succedere cose interessanti (specialmente se usate con rm)
Reactormonk

4
Hai ragione. && è molto meglio se c'è una possibilità che il cd target non esista (per esempio se la directory è su un server NFS che sembra essere inattivo).
joast

Salvami la giornata! Grazie!
Chiakie

Nota che hai anche bisogno di un percorso assoluto (cioè dalla directory principale)
afaik

8

La soluzione per risolvere questo problema è scoprire perché ricevi l'errore di segmentazione e risolverlo.


5

Puoi anche usare @hourlyInstant of0 * * * *


curioso di questa soluzione in che minuto viene eseguito @hourly implica a 0?
ojblass

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

2

Volevi dire che l'eseguibile non viene eseguito, se richiamato da un'altra directory? Questo è piuttosto un bug sull'eseguibile. Una potenziale ragione potrebbe essere che l'eseguibile richiede alcune librerie condivise dalla cartella installata. Puoi controllare la variabile d'ambienteLD_LIBRARY_PATH



0

Dal momento che non potevo eseguire l' Ceseguibile in questo modo, ho scritto un semplice shell scriptche fa quanto segue

cd /..path_to_shell_script
./c_executable_name

Nell'elenco dei lavori di cron, chiamo lo script di shell.


0

uso

path_to_exe >> log_file

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

path_to_exe &> log_file

anche tu puoi usare

crontab -l

per verificare se le tue modifiche sono state salvate.


crontab -l mostra il cron job quando accedo come root. Ho provato il log_file ma è vuoto.
Anonimo
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.