Reputation: 9343
I am trying to get a cronjob to pipe output into a dated file in a specified (folder) location.
My crontab entry looks something like this:
* * * * * /some/path/test.sh >> $(date "+/home/oompah/logs/%Y%m%d.test.log")
What I don't understand is that when I type this command at the console, I get the correct string:
echo $(date "+/home/oompah/logs/%Y%m%d.test.log")
/home/oompah/logs/20110329.test.log
What's causing this error and how may I fix it?
bash version info is:
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
Upvotes: 58
Views: 47175
Reputation: 14147
You should excape the percent signs in your crontab:
* * * * * /some/path/test.sh >> $(date "+/home/oompah/logs/\%Y\%m\%d.test.log")
Percent (%
) signs have a special meaning in crontabs. They are interpreted as newline characters.
Upvotes: 130
Reputation: 25599
make sure you have shebang #!/bin/bash
as the first line in your script. Also, as bmargulies
stated, put the date
command inside the script if possible.
Upvotes: 0
Reputation: 100051
Put the date command inside the script. cron
isn't necessarily running the shell you think it is.
Upvotes: 3