77

I have a crontab like this on a LAMP setup:

0 0 * * * /some/path/to/a/file.php > $HOME/cron.log 2>&1

This writes the output of the file to cron.log. However, when it runs again, it overwrites whatever was previously in the file.

How can I get cron to output to a file with a timestamp in its filename?

An example filename would be something like this: 2010-02-26-000000-cron.log

I don't really care about the format, as long as it has a timestamp of some kind.

rzickler
  • 207

6 Answers6

131

Try:

0 0 * * * /some/path/to/a/file.php > $HOME/`date +\%Y\%m\%d\%H\%M\%S`-cron.log 2>&1

Play around with the date format, if you like; just be sure to escape any % like \%, as above.

fission
  • 3,761
24

I would highly recommend that you save everything into the same file, using timestamp, as explained on Abdullah Diab’s Blog.

remove

2>&1

... and run it through the timestamping script before saving it to log file.

timestamp.sh script:

#!/bin/bash
while read x; do
    echo -n `date +%d/%m/%Y\ %H:%M:%S`;
    echo -n " ";
    echo $x;
done

Remember to chmod +x timestamp.sh to make it executable.

Then edit the cron job line using crontab -e to be like this:

/path/to/my/command.sh 2>&1 | /path/to/timestap.sh >> /var/log/cron/my_log.log
sysadmin1138
  • 135,853
tony gil
  • 369
  • 2
  • 6
7

You can also append your output to the log file by doing it like this:

0 0 * * * /some/path/to/a/file.php >> $HOME/cron.log 2>&1
2

I modified the script like this:

`/bin/date +\%Y\%m\%d`.log
Ardhy
  • 21
-1

I solved this problem; just add the date path (/bin/date) before the date command.

-1
@daily /some/path/to/a/file.php 2>&1 > $HOME/$(date +\%Y\%m\%d\%H\%M\%S)-cron.log