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.
On a default installation the cron jobs get logged to
You can see just cron jobs in that logfile by running
If you haven't reconfigured anything,the entries will be in there.
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
Find the line that starts with:
uncomment that line, save the file, and restart rsyslog:
You should now see a cron log file here:
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:
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:
This will redirect all standard output and errors that may be produced by the script that is run to the log file specified.
Sometimes it can be useful to continuously monitor it, in that case:
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.
If you have
systemd
installed on your system, you could display cron job log by using thejournalctl
command.For example, on my Ubuntu 17.10:
on ubuntu >=18 it maybe
From the
journalctl
manual: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.
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.
You could redirect the output of
cron
to a temporary file. Such as:Error and normal output, both will be redirected to the same file
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
You can search through your crontab logs, like this
You can search through your crontab history logs stored in gz files, like this
Its always considered good to have a logging mechanism, you can quickly setup ELK for your servers, you can also experiment with logz .