2010-08-13 7 views
79

Je dois configurer un travail cron qui exécute un exécutable compilé en utilisant gcc une fois par heure.Comment configurer un travail cron pour exécuter un exécutable toutes les heures?

Je me suis connecté en tant que root typées et crontab -e

Puis je suis entré dans ce qui suit et enregistré le fichier.

0 * * * * /path_to_executable 

Toutefois, le travail cron ne fonctionne pas.

Je vois que quand je tape /...path_to_executable je reçois un défaut de segmentation. Je ne peux exécuter l'exécutable que depuis le dossier dans lequel il se trouve. Y a-t-il un moyen de résoudre ce problème?

+5

C'est un mauvais titre. Vous savez comment configurer le travail cron; ce que vous voulez savoir, c'est comment faire fonctionner la commande. –

+5

appartient à superuser.com (pas directement lié à la programmation) – Philipp

+3

Mauvais titre, mais voici comment j'ai trouvé la solution. –

Répondre

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

doit fonctionner à moins qu'il y ait quelque chose d'autre qui doit être configuré pour que le programme s'exécute.

+9

utiliser && au lieu de;, sinon, des choses intéressantes peuvent se produire (surtout lorsqu'elles sont utilisées avec rm) – Reactormonk

+2

Vous avez raison. && est beaucoup mieux s'il y a un risque que la cible cd n'existe pas (par exemple si le répertoire est sur un serveur NFS qui est en panne). – joast

-1

utilisation

path_to_exe >> log_file 

pour voir la sortie de votre commande aussi des erreurs peuvent être redirigés avec

path_to_exe &> log_file 

vous pouvez également utiliser

crontab -l

pour vérifier que votre les modifications sont enregistrées

+0

crontab -l montre le travail cron lorsque je me connecte en tant que root. J'ai essayé le fichier journal, mais il est vide. – Anonymous

1

Depuis que je ne pouvais pas courir le C exécutable cette façon, j'ai écrit simple shell script qui effectue les opérations suivantes

cd /..path_to_shell_script 
./c_executable_name 

Dans la liste des tâches cron, j'appelle le script shell.

1

Voulez-vous dire que l'exécutable ne peut pas être exécuté s'il est appelé à partir d'un autre répertoire? C'est plutôt un bug sur l'exécutable. Une raison possible pourrait être que l'exécutable nécessite des libraires partagés à partir du dossier installé. Vous pouvez vérifier la variable d'environnement LD_LIBRARY_PATH

4

La bonne façon de résoudre ce problème est de déterminer pourquoi vous obtenez l'erreur de segmentation et de résoudre le problème.

3

Vous pouvez également utiliser @hourly instantanée de 0 * * * *

+0

curieux de cette solution à quelle minute fonctionne-t-il @hourly imply at 0? – ojblass

+1

@ojblass '@ hourly' est un synonyme exact de' 0 * * * * ', il n'y a pas de différence. –

Questions connexes