How to List Cron Jobs in Linux

By 

•

Updated on

•

7 min read

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 .

TaskCommand
List current user cron jobscrontab -l
List another user’s cron jobssudo crontab -u USER -l
List cron jobs for every userUse 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 filescat /etc/crontab /etc/cron.d/*
List all cron.* directory scriptsls -l /etc/cron.{hourly,daily,weekly,monthly}/
List systemd timerssystemctl list-timers
List per-user systemd timerssystemctl --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:

Terminal
crontab -l

If 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:

Terminal
sudo crontab -u mark -l

Each 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:

Terminal
sudo ls -1 /var/spool/cron/crontabs

On Fedora, RHEL, and derivatives, run:

Terminal
sudo ls -1 /var/spool/cron

The output will look something like this:

output
root
mark

Listing 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:

sh
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:

output
# root
0 3 * * * /usr/local/bin/backup.sh
# mark
*/15 * * * * /home/mark/bin/sync-photos

Only 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:

Terminal
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:

Terminal
ls -l /etc/cron.weekly/
output
-rwxr-xr-x 1 root root 813 Mar 21 09:14 man-db

If 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:

Terminal
ls -l /etc/cron.{hourly,daily,weekly,monthly}/
output
/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-db

Notice 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:

Terminal
systemctl list-timers
output
NEXT                         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.service

To include inactive timers as well, use the --all flag:

Terminal
systemctl list-timers --all

Both 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:

Terminal
systemctl --user list-timers

A 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

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