Updated: 9 October 2026 · Applies to: cron 3.0pl1 on Debian 13 and Ubuntu 26.04, cronie 1.7.0 on AlmaLinux 10 and cronie 1.5.7 on Rocky Linux 9 (all tested); systemd timers on Debian 13
To list your own cron jobs, run crontab -l. To see another user's jobs, run sudo crontab -l -u USERNAME. To view cron jobs for all users, you need more than one command, because jobs live in four places: each user's crontab, /etc/crontab, the files in /etc/cron.d/ and the cron.hourly, daily, weekly and monthly folders. Many systems also schedule tasks with systemd timers. The steps below check every one of them.
1. List your own cron jobs
$ crontab -l 0 4 * * * /root/cleanup.sh
If you have none, it prints no crontab for USERNAME and exits with code 1. To change the list, use crontab -e.
2. Show the cron jobs of one user
$ sudo crontab -l -u bob # nightly report 30 2 * * * /usr/local/bin/report.sh >/dev/null 2>&1
This needs root. The order of the options does not matter: crontab -u bob -l works too.
3. Show cron jobs for all users
This loop asks crontab for every account and puts the user name in front of each job, leaving out comment lines:
$ sudo bash -c 'for u in $(getent passwd | cut -d: -f1); do crontab -l -u "$u" 2>/dev/null | grep -v "^#" | sed "s/^/$u: /"; done' root: 0 4 * * * /root/cleanup.sh alice: */15 * * * * /home/alice/bin/backup.sh bob: 30 2 * * * /usr/local/bin/report.sh >/dev/null 2>&1
getent passwd also includes users from LDAP or another directory, which a plain read of /etc/passwd would miss. The loop worked the same way on Debian 13, Ubuntu 26.04, AlmaLinux 10 and Rocky Linux 9.
A quicker way is to read the crontab files directly. They live in a different folder per distribution:
sudo grep -v '^#' /var/spool/cron/crontabs/* # Debian, Ubuntu sudo grep -v '^#' /var/spool/cron/* # AlmaLinux, Rocky Linux, RHEL
/var/spool/cron/crontabs/alice:*/15 * * * * /home/alice/bin/backup.sh /var/spool/cron/crontabs/bob:30 2 * * * /usr/local/bin/report.sh >/dev/null 2>&1 /var/spool/cron/crontabs/root:0 4 * * * /root/cleanup.sh
Only read these files. To change a job, use sudo crontab -e -u USERNAME, so cron notices the change and checks the syntax.
4. List the system-wide cron jobs
Jobs in /etc/crontab and /etc/cron.d/ have an extra field: the user the command runs as.
$ grep -v '^#' /etc/cron.d/* /etc/cron.d/e2scrub_all:10 3 * * * root test -e /run/systemd/system || SERVICE_MODE=1 /sbin/e2scrub_all -A -r /etc/cron.d/myapp:*/5 * * * * www-data /usr/bin/php /var/www/app/cron.php
(Shortened.) Then look at /etc/crontab. The two families use it differently:
- Debian and Ubuntu:
/etc/crontabruns the folders withrun-parts, for example17 * * * * root cd / && run-parts --report /etc/cron.hourly. The daily, weekly and monthly lines hand over to anacron when it is installed. - AlmaLinux, Rocky Linux and RHEL:
/etc/crontabholds only comments. Hourly jobs start from/etc/cron.d/0hourly(01 * * * * root run-parts /etc/cron.hourly), and/etc/anacrontabruns the daily, weekly and monthly folders between 03:00 and 22:00 with a random delay.
5. Check the hourly, daily, weekly and monthly folders
ls /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
Every executable script in these folders is a job. On Debian and Ubuntu, ask run-parts which scripts will really run:
$ run-parts --test /etc/cron.daily /etc/cron.daily/apt-compat /etc/cron.daily/backup /etc/cron.daily/dpkg /etc/cron.daily/exim4-base /etc/cron.daily/logrotate /etc/cron.daily/man-db
In that test, the folder also held backup.sh, which is missing from the list: Debian's run-parts skips file names with a dot, so name the script backup, not backup.sh. On AlmaLinux 10, run-parts --list /etc/cron.daily did include backup.sh.
6. List systemd timers
Many packages now schedule their work as systemd timers instead of cron jobs:
$ systemctl list-timers --all NEXT LEFT LAST PASSED UNIT ACTIVATES (timer lines omitted)
Each line shows when a timer runs next, when it last ran and the service it starts. On Debian 13 we saw, among others, apt-daily.timer, logrotate.timer, man-db.timer, dpkg-db-backup.timer and fstrim.timer.
7. One-off jobs and background jobs
- at jobs:
atq(orat -l) lists jobs queued withat. According to the at manual, root sees everybody's jobs and other users see only their own. Remove one withatrm NUMBER. - Shell jobs:
jobs -lshows the commands running in the background of your current terminal (started with&or paused with Ctrl+Z). They are not scheduled jobs.
Check that a cron job ran
journalctl -u cron --since today # Debian, Ubuntu journalctl -u crond --since today # AlmaLinux, Rocky Linux sudo grep CROND /var/log/cron # AlmaLinux, Rocky Linux
Since Debian 12, rsyslog is no longer installed by default, so /var/log/syslog may not exist; the journal always works.
Cron jobs on shared hosting
On cPanel hosting you cannot run crontab for other users. Open cPanel › Advanced › Cron Jobs: your jobs are in the Current Cron Jobs table. On Virtualmin, according to the Virtualmin documentation, the jobs are under Webmin › System › Scheduled Cron Jobs. Our Acceptable Use Policy allows cron on shared and reseller hosting, with each job running no more often than every 15 minutes.
Related: how to read crontab syntax, how to add jobs to cron, how to schedule jobs with anacron and how to create a cron job in cPanel.