1177

I want to verify that my cron job is executing and at what time. I believe there is a log for my sudo crontab -e jobs, but where?

I searched google and found recommendations to look in /var/log (in which I do not see anything with 'cron' in the name) and to edit the file /etc/syslog.conf which I also do not have.

2
  • 6
    Beware that in the crontab context the % character creates a new line, so a misuse of it (i.e. not escaping it, e.g. in date +"%Y-%m-%d") may prevent correct logging (date +%Y-%m-%d >> /tmp/cron.log won’t work). Also, this answer may help. Jul 8, 2021 at 17:11
  • 3
    I couldn't figure out why my cron jobs weren't running until I saw Skippy's comment. I was using the syntax script.sh >> "build-logs-$(date +%Y%m).txt" to save logs. Escaping the % fixed it i.e. script.sh >> "build-logs-$(date +\%Y\%m).txt"
    – Jonathan
    Jul 14, 2022 at 15:56

16 Answers 16

1400

On a default installation cron jobs will be logged to

/var/log/syslog

You can see just cron jobs in that logfile by running

grep CRON /var/log/syslog

If you haven't reconfigured anything, the entries will be in there.

16
  • 78
    If there is no MTA installed, cron just throws the job output away. Nov 18, 2013 at 23:19
  • 20
    The cron log may be in another file in the /var/log/ directory. Check for cron.log or equivalent.
    – Navigatron
    Jan 31, 2014 at 10:21
  • 19
    this doesn't give me output from the job. it just gives a generic message that the cron was processed.
    – chovy
    Dec 12, 2015 at 0:34
  • 13
    on AWS it was /var/log/cron
    – tsukimi
    Feb 4, 2017 at 1:23
  • 11
    @shadi you could also grep -i CRON to search case-insensitive
    – nafg
    Apr 24, 2017 at 2:08
374

You can create a cron.log file to contain just the CRON entries that show up in syslog. Note that CRON jobs will still show up in syslog if you follow the following directions.

Open the file

/etc/rsyslog.d/50-default.conf

Find the line that starts with:

#cron.*

uncomment that line, save the file, and restart rsyslog:

sudo service rsyslog restart

You should now see a cron log file here:

/var/log/cron.log

Cron activity will now be logged to this file (in addition to syslog).

Note that in cron.log you will see entries for when cron ran scripts in /etc/cron.hourly, cron.daily, etc. - e.g. something like:

Apr 12 14:17:01 cd CRON[14368]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

However, you will not see more information about what scripts were actually ran inside /etc/cron.daily or /etc/cron.hourly, unless those scripts direct output to the cron.log (or perhaps to some other log file).

If you want to verify if a crontab is running and not have to search for it in cron.log or syslog, create a crontab that redirects output to a log file of your choice - something like:

01 14 * * * /home/joe/myscript >> /home/log/myscript.log 2>&1

This will redirect all standard output and errors that may be produced by the script that is run to the log file specified.

8
  • 2
    With my opinion, this answer is better in future. So your syslog file is more clear.
    – shgnInc
    Dec 22, 2013 at 8:36
  • 14
    To also exclude the cron log from syslog you can change the line *.*;auth,authpriv.none -/var/log/syslog to *.*;auth,authpriv.none,cron.none -/var/log/syslog.
    – Koen.
    Feb 13, 2014 at 11:35
  • 1
    On our CentOS 6, cron.* defined in /etc/rsyslog.conf, whereas i's empty in rsyslog.d folder.
    – Scott Chu
    Sep 17, 2014 at 3:35
  • 1
    what is 2>&1 stand for ?
    – John Joe
    Mar 21, 2017 at 2:41
  • 4
    @JohnJoe 2>&1 is used to forward stderr to stdout, this way you'll also get stderr to log file. Jul 25, 2017 at 12:38
129

Sometimes it can be useful to continuously monitor it, in that case:

tail -f /var/log/syslog | grep CRON
1
  • 29
    Well, you probably want to use -F, which will follow the file across name changes, so that when it gets truncated/moved to, e.g. /var/log/syslog.1.gz, you're still following the current /var/log/syslog file. Per the man docs, this is the same as running tail xxxx -f --retry
    – Momer
    Dec 17, 2014 at 22:24
84

You can also direct the output of the individual cronjobs to their own logs for better readability, you will just need to append the output of date somewhere.

 0 15 * * *    /home/andrew/daily-backup.sh >> /var/log/daily-backup.log 2>&1
4
  • 5
    true, but if this line fails to run due to syntax error, nothing will be written in the output log specified.
    – Raptor
    Jul 24, 2015 at 2:37
  • 19
    You can solve this by appending 2>&1 after the log file is specified. It is also best practice to test your cronjobs before adding them to the crontab, and then being present for the first scheduled run to ensure that the crontab is properly formatted. Jul 24, 2015 at 16:04
  • 3
    If daily-backup.log file doesn't exist, CRON creates it automatically. Dec 23, 2019 at 9:51
  • This is really helpful as my PHP results are appended to the log. The only negative is there are no line breaks.
    – Mark Lee
    Aug 10, 2021 at 16:13
53

If you have systemd installed on your system, you could display cron job log by using the journalctl command.

For example, on my Ubuntu 17.10:

journalctl -u cron.service
1
  • If you use cronie, try journalctl -u cronie.service
    – Aditya
    Jan 2, 2023 at 8:55
32
journalctl -t CROND

on ubuntu >=18 it maybe

journalctl -t CRON

From the journalctl manual:

   -t, --identifier=SYSLOG_IDENTIFIER|PATTERN
       Show messages for the specified syslog identifier SYSLOG_IDENTIFIER, 
       or for any of the messages with a "SYSLOG_IDENTIFIER" matched by PATTERN.

       This parameter can be specified multiple times.
2
  • 2
    On an ubuntu 20, you can use the tag CRON, the tag CROND does not give any results.
    – Cie6ohpa
    Jul 7, 2021 at 6:15
  • 1
    On RHEL 7, most jobs are run by anacron and /var/log/cron has much more useful info than journalctl -t CROND Dec 10, 2021 at 15:52
17

This is a very old question, but none of these answers seem satisfactory.

First make your cron job run every minute, then run cron as non-daemon (temporarily, just kill any crond that may have already started) with test logging:

crond -nx test

And see the log of your program execution flowing through your terminal.

3
  • 11
    Does not run on 14.04 - No command 'crond' found, did you mean: Command 'cron' from package 'cron' (main)
    – G-.
    Jul 6, 2017 at 9:40
  • Same error on Ubuntu 18.04 today
    – Nam G VU
    Apr 25, 2020 at 12:30
  • 1
    crond and cron is the same, crond is used in RedHat, CentOS and Suse platforms. And cron is used in Ubuntu. So dependes on your system, use crond or cron.
    – Kalamarico
    Feb 11, 2021 at 10:52
14

You could redirect the output of cron to a temporary file. Such as:

00 11 07 * * /bin/bash /home/ubuntu/command.sh > /tmp/output 2>&1

Error and normal output, both will be redirected to the same file

13

It is in /var/log/syslog by default.

But it can be set up to create a separate cron.log, which is more useful.

This Q&A describes the process:

16.04: How do I make cron create cron.log and monitor it in real time?

Also in this answer is the instructions to create a wcron command that displays it is near-real-time. Plus, it links to another answer,

How to change cron log level?

that shows how to change the log level to include more than just the start of jobs - level 15 will show errors and end time, also.

12

Like mentioned earlier, cron jobs get logged to /var/log/syslog

You can pipe the syslog to grep and filter out the CRON logs, like this

less /var/log/syslog | grep CRON 

You can search through your crontab logs, like this

less /var/log/syslog | grep CRON | grep <search-keyword-comes-here>

You can search through your crontab history logs stored in gz files, like this

less /var/log/syslog.2.gz | grep CRON | grep <search-keyword-comes-here>

Its always considered good to have a logging mechanism, you can quickly setup ELK for your servers, you can also experiment with logz .

7

this shows CRON runtime i used Centos 7

cat /var/log/cron
1
  • 7
    CentOS != Ubuntu ...
    – user1091774
    Mar 8, 2021 at 7:02
5

On Ubuntu 20.04, /var/mail/{user} had the cron messages i was looking for.

I couldn't find decent cron logs in /var/log/messages.

2
  • 3
    Wasn't a question, I'm posting an answer because I found cron logs in /var/mail/{user} instead of /var/log/messages or /var/log/cron or /var/log/syslog described in other answers. Jan 12, 2021 at 15:56
  • The actual output of the command is sent in the mail. Information in /var/log/syslog which just reports that cron was run. Good answer!
    – MrMas
    Jun 8, 2021 at 17:37
4

Check all CRON related logs in syslog files included compressed log files as well like this way:

zless /var/log/syslog* | grep CRON
2

I found the current cron logs in /var/log/cron and previous logs on /var/log/cron-date.

1

It may be different depending on the system type and edition. But in many cases, you have to figure out the time basis that the target crontab rule runs on. So for example, if you're searching for the related log for a daily crontab rule, then you'll find the log divided into different files, one per day, in:

$ ls -ltrh /var/log/cron-*

And you'll get the logfiles.

0

It is strange but my cron is reporting into mail:

You have new mail in /var/mail/xerostomus
$ mail 
Mail version 8.1.2 01/15/2001.  Type ? for help.
"/var/mail/xerostomus": 6 messages 6 new
>N  1 [email protected]  Wed Sep 13 15:59   24/852   Cron <xerostomus@T430> env DISPLAY=:0 /home/xerostomus/idesk_cron.sh

By the way I am experimenting with Debian... :-)

If I need to log something in cron I use this simple task:

echo "cron report: variableA($variableA)" >> /dev/shm/grep.tmp

Not very smart, but works... :-)

You must log in to answer this question.

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