How to redirect output to a file from within cron?

I have a backup script which I need to run at a particular time of a day so I am using cron for this task and from within cron am also trying to redirect the output of backup script to a logfile.

crontab -e

*/1 * * * * /home/ranveer/ &>> /home/ranveer/backup.log

In the above cron entry I am redirecting both stderr and stdout to a log file.

The above cron job executes fine according to syslog and it performs the task mentioned in the file but it doesn’t write anything to the log file.


Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/ &>> /home/ranveer/backup.log)

When I run the script from cli it works as required and output is written to a log file

ranveer@ranveer:~$ ./ &>> backup.log 
ranveer@ranveer:~$ cat backup.log
Fri Oct 19 20:28:01 IST 2012
successfully copied testdir
test.txt successfully copied

So, why the output of file is not getting redirected to the file from within cron.

Asked By: RanRag


I solved the problem. There are two ways:


Change the redirection from &>> to 2>&1. So now crontab -e looks like

*/1 * * * * /home/ranveer/ >> /home/ranveer/vimbackup.log 2>&1

I believe the above works because by default cron is using sh to run the task instead of bash so &>> is not supported by sh.


Change the default shell by adding SHELL=/bin/bash in the crontab -e file.

Answered By: RanRag

disclaimer [1].

I would like to add a footnote or addendum to @RanRag’s answer.

Make sure your shell redirection syntax conforms to /bin/sh. If you try to use shell redirection syntax that is not valid with /bin/sh then your command will fail and your cron job will not ever run.

In your /etc/cron.d/example1 config files if you specify a user other than root and that user’s login shell is not /bin/bash… you must still use /bin/sh syntax in /etc/cron.d/example1 command.

For example

If your user has shell csh or zsh or ksh set for his login shell. In your /etc/cron.d/example1 config file, the command must use /bin/sh syntax. Specifically any shell redirection must be /bin/sh syntax.

If you try to use for example csh shell redirect syntax in your /etc/cron.d/example1, then your cron job will never run. The logfile for crond located at /var/log/cron shall say that the command is run but the command will error out with a syntax error before your command gets run.

Where does crond emit error messages for a syntax error?

The error is not ever reported in /var/log/cron. crond instead by default emits any error messages using mail. So you must check /var/spool/mail/${USER} to see what is the error.



  • This answer assumes a sysv system
  • systemd information may differ
  • Specifically this information was learned for centos-6 distro and may not apply to different sysv distros
    • I mention centos-6 specifically, because different distros may have a different crond implementation that differs from centos-6
Answered By: Trevor Boyd Smith

You can direct output information to a log file with 2 greater-than signs like this example:

* * * * * /usr/bin/python /path/to/ >> /path/to/logfile/output.log

Please see this convient crontab-line generator in this link:

Answered By: Ramces Gonzalez
Categories: Answers Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.