102
votes

I need to set up a cron job that runs an executable compiled using gcc once every hour.

I logged in as root and typed crontab -e

Then I entered the following and saved the file.

0 * * * *  /path_to_executable

However, the cron job does not work.

I see that when I type /...path_to_executable I get a segmentation fault. I can only execute the executable from the folder it is located in. Is there a way I can solve this problem?

7
That's a bad title. You know how to set up the cron job; what you want to know is how to make the command work. - David Thornley
belongs on superuser.com (not directly related to programming) - Philipp
Wrong title, but this is how i found the solution. - Roman Holzner
Your executable is probably started. I recommend using syslog(3) inside it (and at least make a log message at start, to be sure it is started). - Basile Starynkevitch

7 Answers

167
votes
0 * * * * cd folder_containing_exe && ./exe_name

should work unless there is something else that needs to be setup for the program to run.

8
votes

The solution to solve this is to find out why you're getting the segmentation fault, and fix that.

7
votes

You can also use @hourly instant of 0 * * * *

4
votes

If you're using Ubuntu, you can put a shell script in one of these folders: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly or /etc/cron.weekly.

For more detail, check out this post: https://askubuntu.com/questions/2368/how-do-i-set-up-a-cron-job

2
votes

Did you mean the executable fails to run , if invoked from any other directory? This is rather a bug on the executable. One potential reason could be the executable requires some shared libraires from the installed folder. You may check environment variable LD_LIBRARY_PATH

0
votes

Since I could not run the C executable that way, I wrote a simple shell script that does the following

cd /..path_to_shell_script
./c_executable_name

In the cron jobs list, I call the shell script.

0
votes

use

path_to_exe >> log_file

to see the output of your command also errors can be redirected with

path_to_exe &> log_file

also you can use

crontab -l

to check if your edits were saved.