5

/home/myname/bin/script:

#!/bin/bash
ifconfig > /home/myname/foo

Crontab:

* * * * * /home/myname/bin/script

...waits 1 minute...

@@ 11:35:51 [myname@comp - ~]$ ls foo
-rw-r--r-- 1 myname myname 0 Jul  7 11:35 foo
@@ 11:35:55 [myname@comp - ~]$ 

I can't figure out why foo would end up empty. Running the ifconfig command on the command line works exactly as you'd expect, dumping its output into a file just like normal. For reference, I'm running Ubuntu 8.04.

1
  • 1
    I'm just going to say that, in the intervening five years, one thing I constantly have to remind myself of about crons is that they don't run with the same environment (path, aliases, etc.) that I'm used to on the shell, and this continually trips me up.
    – dirtside
    Jul 30, 2014 at 18:55

5 Answers 5

14

try using the full path to the ifconfig executable in your script.

which ifconfig will give you the path.

I don't know what ipconfig does in ubuntu. :)

4
  • Sorry, it's ifconfig in the script, I typo'd it in the question.
    – dirtside
    Jul 7, 2009 at 18:52
  • I figured. I do that from time to time too. Cron usually just wants the full path so let us know how things turn out.
    – egorgry
    Jul 7, 2009 at 18:55
  • ...but yes, it was a path problem. ifconfig is under /sbin, which is not in the default bash path. Thanks.
    – dirtside
    Jul 7, 2009 at 18:57
  • ah makes sense, see I always overlook something when writing scripts, nice spot egorgry
    – Rodent43
    Jul 7, 2009 at 18:59
3

In a cron job you probably want to redirect both stdout and stderr to the file. Change your script to this:

#!/bin/bash
ifconfig &> /home/myname/foo

and you'll see the error message in your output file.

See All About Redirection in the Bash Programming How To for more info.

3

crontab does not use user path variable.

You have to place command with full path to it. i.e. /sbin/ifconfig. Then this will be working.

Other way to solve this problem is to add PATH variable to your script and export it then your script will be able to use standard commands with out adding full path every time. You can check path typing echo $PATH in terminal.

2
  1. You probably need the full path to ipconfig in your script, or did you mean ifconfig? Either way, you should use the full path.
  2. You capture stdout in /home/myname/foo, but not stderr which probably gets the clue that you're missing here. Check your email for the output of the cronjob.
0

have you tried manually running your script?

cd in to /home/myname/bin/

./script

does it make the foo with contents as expected?

is the script executable?

I know that might sound like simple things but sometimes that is what is overlooked, especially when I make a script

1
  • Yes, and yes. The script executes normally when run by hand, and it is executable.
    – dirtside
    Jul 7, 2009 at 18:52

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .