How to List Cron Jobs in Linux

Cron is a time-based scheduler that runs commands and scripts at defined intervals. These scheduled tasks are called cron jobs, and they can run every minute, hourly, daily, weekly, monthly, or on custom schedules.
Cron jobs are commonly used for system maintenance. For example, you can schedule database backups , package updates, cache cleanup, and report emails.
This guide explains how to view and list user cron jobs, system-wide cron jobs, and systemd timers.
To read what an existing cron line does, paste it into the interactive crontab generator for a plain-English explanation.
Quick Reference
For a printable quick reference, see the crontab cheatsheet .
| Task | Command |
|---|---|
| List current user cron jobs | crontab -l |
| List another user’s cron jobs | sudo crontab -u USER -l |
| List cron jobs for every user | Use the spool-based script below |
| List users that have crontabs (Debian/Ubuntu) | sudo ls -1 /var/spool/cron/crontabs |
| List users that have crontabs (RHEL/Fedora) | sudo ls -1 /var/spool/cron |
| View system cron files | cat /etc/crontab /etc/cron.d/* |
| List all cron.* directory scripts | ls -l /etc/cron.{hourly,daily,weekly,monthly}/ |
| List systemd timers | systemctl list-timers |
| List per-user systemd timers | systemctl --user list-timers |
Listing User Cron Jobs
Users’ crontab files are named based on the user name, and their location varies by operating system. In Red Hat-based distributions, crontab files are stored in the /var/spool/cron directory, while on Debian and Ubuntu, files are stored in the /var/spool/cron/crontabs directory.
To view or list all cron jobs for the user you are currently logged in as, use the crontab
command:
crontab -lIf the user has set up cron jobs, the content of the user crontabs will be displayed on the screen. Otherwise, the command will print no crontab for <username>.
To list other users’ cron jobs, use the -u option to specify the user name at the end of the command. For example, to list the cron jobs of the user named “mark”, you would use:
sudo crontab -u mark -lEach user crontab file has 600 permissions and is owned by the user. Only root and users with sudo
privileges can view other users’ cron jobs.
To find out which users have created cron jobs, list
the content of the spool directory as root or sudo user.
On Debian, Ubuntu, and derivatives, run:
sudo ls -1 /var/spool/cron/crontabsOn Fedora, RHEL, and derivatives, run:
sudo ls -1 /var/spool/cronThe output will look something like this:
root
markListing Cron Jobs for All Users
The spool listing tells you who owns a crontab, but not what is inside it. To print every saved user crontab in a single pass, select the spool directory used by the distribution and loop over the files stored there:
spool=/var/spool/cron
[ -d /var/spool/cron/crontabs ] && spool=/var/spool/cron/crontabs
sudo sh -c '
for file in "$1"/*; do
[ -f "$file" ] || continue
user=${file##*/}
printf "# %s\n" "$user"
crontab -u "$user" -l
done
' sh "$spool"The test selects /var/spool/cron/crontabs on Debian and Ubuntu or /var/spool/cron on Fedora and RHEL. The root shell can read the protected directory, and each heading identifies the owner of the crontab that follows:
# root
0 3 * * * /usr/local/bin/backup.sh
# mark
*/15 * * * * /home/mark/bin/sync-photosOnly the two users with saved crontabs appear in this example. This covers user crontabs only, so system schedules still need the files described in the next section.
Listing System Cron Jobs
/etc/crontab and the files inside the /etc/cron.d directory are system-wide crontab files that can be edited only by the system administrators.
Use cat
, less
, or any text editor to view the content of the files:
cat /etc/crontab /etc/cron.d/*In most Linux distributions, you can also put scripts inside the /etc/cron.{hourly,daily,weekly,monthly} directories, and the scripts are executed every hour/day/week/month.
Each script inside these directories must have execute permission . Otherwise, the cron job will not be executed.
For example, to view all the weekly cron jobs, you would type:
ls -l /etc/cron.weekly/-rwxr-xr-x 1 root root 813 Mar 21 09:14 man-dbIf the output is empty, it means that there are no weekly cron jobs.
To check every interval at once, pass all four directories to ls:
ls -l /etc/cron.{hourly,daily,weekly,monthly}//etc/cron.daily/:
total 16
-rwxr-xr-x 1 root root 1478 Mar 21 09:14 apt-compat
-rwxr-xr-x 1 root root 1235 Mar 21 09:14 dpkg
-rwxr-xr-x 1 root root 377 Mar 21 09:14 logrotate
-rwxr-xr-x 1 root root 539 Mar 21 09:14 man-db
/etc/cron.hourly/:
total 0
/etc/cron.monthly/:
total 0
/etc/cron.weekly/:
total 4
-rwxr-xr-x 1 root root 813 Mar 21 09:14 man-dbNotice that ls sorts the directory arguments alphabetically, so the listing comes back as daily, hourly, monthly, weekly instead of the order we typed. Output varies by distribution and installed packages. On current Ubuntu and Debian releases, packages such as APT and logrotate can install compatibility scripts alongside systemd timer units. The directory listing shows which scripts are installed, not which scheduling mechanism is active.
Systemd Timers
Systemd timers
are unit files that end with the .timer suffix and allow you to run service units based on time.
On Linux distributions using systemd as an init system, systemd timers are often used as an alternative to the standard cron daemon.
To view a list of all active systemd timers on your machine, run the following command:
systemctl list-timersNEXT LEFT LAST PASSED UNIT ACTIVATES
Mon 2026-02-09 00:00:00 UTC 3h 12min left Sun 2026-02-08 00:00:00 UTC 20h ago logrotate.timer logrotate.service
Mon 2026-02-09 00:00:00 UTC 3h 12min left Sun 2026-02-08 00:00:00 UTC 20h ago man-db.timer man-db.service
Mon 2026-02-09 06:45:31 UTC 9h left Sun 2026-02-08 06:22:17 UTC 14h ago apt-daily.timer apt-daily.service
Mon 2026-02-09 06:53:04 UTC 10h left Sun 2026-02-08 06:41:39 UTC 14h ago apt-daily-upgrade.timer apt-daily-upgrade.service
Mon 2026-02-09 20:48:56 UTC 24h left Sun 2026-02-08 20:48:56 UTC 3min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.serviceTo include inactive timers as well, use the --all flag:
systemctl list-timers --allBoth commands report on the system instance of systemd. Timers can also be defined per user under ~/.config/systemd/user, and those never show up in the system list. To see the timers belonging to the account you are logged in as, add the --user flag:
systemctl --user list-timersA user timer only runs while that user has an active session, unless lingering is enabled for the account with loginctl enable-linger USER. A schedule that appears to skip runs on a headless machine is often a user timer without lingering.
Troubleshooting
crontab -l shows no crontab for <user>
This means the user has no personal crontab yet. Create one with crontab -e, save it, and run crontab -l again.
sudo crontab -u USER -l returns a permission error
Run the command as root or with a user that has sudo privileges. Also verify that the target user exists on the system.
A script exists in /etc/cron.weekly/ but does not run
Check that the script is executable (chmod +x /path/to/script) and has a valid shebang.
A job is listed but never seems to run
Listing a job proves the schedule exists, not that cron executed it. Read the cron log with journalctl -u cron --since today on Debian and Ubuntu, or journalctl -u crond --since today on Fedora, RHEL, and derivatives. The guide on scheduling cron jobs with crontab
walks through the remaining failure paths.
FAQ
What is the difference between crontab -l and /etc/crontab?crontab -l shows per-user jobs, while /etc/crontab is a system-wide crontab managed by administrators.
Where are user crontabs stored?
On Debian/Ubuntu, they are in /var/spool/cron/crontabs, and on RHEL/Fedora they are in /var/spool/cron.
Should we use cron or systemd timers?
Both work. Systemd timers integrate better with modern Linux service management and logging, while cron remains simple and widely used.
Conclusion
You can list per-user cron jobs with crontab -l, view system-wide schedules in /etc/crontab and /etc/cron.d, and check systemd timers with systemctl list-timers.
Tags
Linuxize Weekly Newsletter
A quick weekly roundup of new tutorials, news, and tips.
About the authors

Dejan Panovski
Dejan Panovski is the founder of Linuxize, an RHCSA-certified Linux system administrator and DevOps engineer based in Skopje, Macedonia. Author of 1000+ Linux tutorials with 20+ years of experience turning complex Linux tasks into clear, reliable guides.
View author page