Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

A failed-cron email is evidence that a scheduled command exited with an error or produced output—not proof that the scheduler itself is broken. Preserve the complete message, identify the exact command, user, host, schedule and timestamp, then reproduce that command under the same account and environment. The workflow below separates command failures, logging problems, mail-delivery issues and duplicate schedulers so you can fix the first causal error and verify the next run.

1. Preserve the email and classify the failure

Do not delete or trim the notification. Save the complete message, including headers and every line of standard output and standard error. The first error line is often the most useful clue; later lines may only be consequences.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • From and To: These show which local mail system sent the message and which address was selected.
  • Host: Confirm the machine that actually ran the job. A similarly named staging or production host can make a correct diagnosis look wrong.
  • Timestamp and time zone: Compare the time with the server’s clock and the schedule. A clock or time-zone mismatch can make a healthy run appear to have been missed.
  • Schedule: Record the minute, hour, day-of-month, month and day-of-week fields, or the timer expression shown in the message.
  • Command and user: Copy the exact job line and identify the account that owns the crontab or service.
  • Exit wording and output: Note an exit status, “command not found,” permission error, timeout, missing file, authentication failure or other first symptom.

A classic cron daemon normally mails output from a command to the crontab owner or to the address in MAILTO. Systemd-cron sends a failure notification containing status information and journal output; the Debian crontab(5) documentation says the default message includes systemctl status and the full failed-run log copied from the journal. Treat those formats differently when choosing where to investigate.

2. Find which scheduler owns the job

Before editing anything, establish whether the command is defined once or several times. A job can exist in a user’s crontab, a system-wide file, anacron, a native systemd timer or a generated systemd-cron unit.

#1 Best Overall
Sale
Compressed Air Duster,130000RPM Super Power Cordless Air Duster,Rechargeable Brushless Blower,3 Gear Adjustable Blower with LED Light,Dust Remover for Computer/House/Outdoor/Car
  • Powerful Turbo Fan:CAGIWIRU Electric Air Duster have reached speed up to 130000RPM,Can efficient remove dust and debris.With LED light and Three Adjustable Speed to meet with different cleaning tasks.
  • With Attached USB C Fasting Charging cable.Charing 3 hours,Enjoy up to 240 minutes of use on the lowest setting, For third speed can use for 25mins.with four charging options to meet with your needs.
  • Wide Application: attached 5 different nozzles,making it suitable for a variety of scenes, such as car,pet, pc, keyboards, and other electronic devices. It also serves for office and home clean duster.
  • Handy Design & Portable:Cordless air duster electric nozzle is Light weight and small size, design and comfortable to hold and space saving, convenient to carry around. You can put it in your room or inside the car without taking up space.
  • Economical &Reusable: Built durable materials with a long-lasting battery,our CAGIWIRU air duster it's a sustainable alternative to disposable air cans.

Inspect cron definitions

crontab -l
sudo crontab -l -u USER
sudo cat /etc/crontab
sudo ls -la /etc/cron.d
sudo grep -R "distinct-command-fragment" /etc/cron.d /etc/crontab 2>/dev/null

Replace USER with the account shown in the email and use a distinctive part of the command when searching. Check anacron configuration as well if the machine uses it; anacron jobs are another source of scheduled execution outside a user’s personal crontab.

Inspect systemd timers and generated units

systemctl list-timers --all
systemctl status NAME.timer
systemctl cat NAME.timer
systemctl cat NAME.service

Use the actual timer and service names discovered on the host. Systemd-cron generates units from cron entries, while native systemd timers have their own .timer and .service files. Native systemd timers take precedence over cron jobs with the same name according to the systemd-cron documentation. Do not assume that seeing a line in crontab -l means that line is the only owner.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Look for duplicate daemons

Running a cron daemon together with systemd-cron can execute the same scripts more than once. The systemd-cron documentation explicitly warns against operating it alongside a cron daemon. If a side effect occurred twice, compare timestamps in the logs and inspect enabled services before changing the command itself.

3. Reproduce the command as the cron user

The most common reason a job works in an interactive shell but fails on the server is that cron starts it with a different environment. A login shell may supply a long PATH, a home directory, locale settings, mounted credentials and a working directory that cron does not.

Rank #2
EVEO® Screen Cleaner Spray Kit (Streak-Free) TV Screen Cleaner for Smart TV, Lcd, LEd, Oled | Computer Screen Cleaner Spray and Wipe Microfiber Cloth - TV, Monitor, Laptop, iPad, Car - 6.7oz 1 Pack
  • Screen Cleaner is Your Screen’s New Bestfriend! - EVEO is proud to present a screen cleaner that’s perfectly suited for your TV. Meet your new screen cleaner, computer screen cleaner, laptop cleaner, iPad cleaner, Macbook,tv cleaner or any other electronic device. Our screen cleaner spray and wipe along with the included plush microfiber cloth, easily removes dust, fingerprints & other smudges on the screen’s surface. Clean effectively for a streak-free screen
  • Gentle on your Screens - Our screen cleaner spray and wipes is compatible to be used even for the most sensitive LCD, LED, CRT, and OLED screens in proper use. Be at ease knowing that this product is compatible with all the major brands: LG, SONY, Samsung, Sharp, iPad, iPhone, Android screens, Kindle, PC monitors - we’ve got you covered! Can be used as LCD screen cleaner, tv cleaner, smart tv screen cleaner, and more
  • Premium Super Soft Plush Microfiber Cloth - Included in this efficient screen cleaning kit. This screen cleaner spray and wipe has our signature plush microfiber cloth specially designed to comply with screens and monitors and leave them streak-free. Has been shown to effectively absorbs stubborn stains, zero streaks, and no fiber shedding. Always use this together with our screen cleaner for the best results
  • Easy-to-Use Screen Cleaner Kit + microfiber cleaning cloth - The EVEO Screen Cleaning Kit will easily be your new favorite tool when it comes to taking care of the things you love most, quick and easy solution for a streak-free screen. Simply screw on the sprayer gun on the screen cleaner bottle. Spray the cleaning liquid onto the microfiber cloth, then wipe the screen until desired cleanliness & shine is achieved.
  • Quality Screen Care Kit Worth Purchasing - Enjoy a convenient Screen Cleaner anytime, anywhere you need it. Your satisfaction is our top priority. We stand behind the quality of our products and that’s why, you shouldn’t be worrying at all. We manufacture the Best Screen Cleaner. and can be used for laptop cleaning kit, laptop screen cleaner, tv screen cleaner for smart tv. MacBook screen cleaner, monitor cleaner or screen cleaner spray for electronic devices with microfiber cleaning cloth

Use the owning identity

sudo -u USER -H /bin/sh -c 'cd /absolute/working/directory && /absolute/path/to/command arg1 arg2'

Use the account from the job definition, not your own account. The -H option gives that user the expected home directory; the explicit cd removes ambiguity about relative paths. If the job runs as root, reproduce it only with the minimum necessary privileges and take the usual care with destructive commands.

Make the environment deliberate

Use absolute paths for executables, scripts, configuration files and output files. Set a known PATH in the crontab or wrapper script instead of relying on an interactive shell:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=admin@example.net
15 2 * * * /usr/local/sbin/backup-job

Check every dependency that the command expects:

  • Working directory: A relative input or output path may resolve under a different directory, or fail because the directory does not exist.
  • Permissions and ownership: Verify read, write and execute permission on the script, parent directories, sockets and destination storage.
  • Credentials: Cron may not load an interactive key agent, cloud credential helper, password store or shell profile. Point the command at an explicit, restricted configuration file where appropriate.
  • Mounts and network: A remote filesystem, database or API may not be ready when the schedule fires. Check reachability and mount state from the cron identity.
  • Locale and encoding: Parsing can change when LANG, LC_ALL or character encoding differs from your terminal.
  • Configuration files: A script that works after sourcing a profile may fail because cron never reads that profile. Make required settings explicit rather than sourcing a broad, interactive configuration.

Capture the environment during a controlled test if the difference is unclear:

sudo -u USER -H /usr/bin/env | sort

Compare that output with the environment from the successful interactive run, then add only the variables the job actually requires.

Rank #3
Sale
BladeHawks RGB Gaming Mouse Pad Extra Large Extended 31.5x12 Inch-Black | LED mouse pad with 14 lighting modes, covers keyboard & mouse, anti-slip rubber base, waterproof surface, USB powered
  • 【Large size】:Measuring 800 x 300 mm/ 31. 5×12 inches, which is wider and taller than others. Large mouse pad can perfectly fit your keyboard and mouse of any size, and there is also ample space for peripherals such as phones, tablets, etc.
  • 【LED backlight mouse pad】:Blade Hawks RGB mouse pad provides 7 static modes and 7 dynamic modes will give you the options you are looking for. Power-off memory function remembers the last lighting mode you selected. The super glow fiber Chroma will give you a colorful gaming setup that you want.
  • 【Anti-slip rubber base】:Made from Natural rubber, this gaming mousepad will firmly grip your desktop, allowing you to enjoy the ultimate precision in the games you are most passionate about. It also comes with a texture that enhances this ability even further.
  • 【Smooth and waterproof surface】: Micro-textured cloth surface, for extremely precise mouse control and a smooth movement. When liquid splashes on the gaming mouse pad, it forms water droplets and slides down. Will not delay your work or gameplay.
  • 【Plug and play】: This mouse and keyboard pad is powered by USB, plug and play, no driver required. One button control light modes. Press one time to change the lighting mode, press twice to change the brightness, press and hold about 3 seconds turn ON/OFF.

4. Read the authoritative log

Systemd-cron jobs

Start with the generated unit named by the notification or discovered with systemctl list-units:

systemctl status GENERATED.service
journalctl -u GENERATED.service --since "2026-10-15 00:00" --until "2026-10-15 23:59"
journalctl -u GENERATED.service -n 200 --no-pager

Generated units record the original job line in the journal with CRON_JOB=. Filter for that field when several jobs write to the same service or when the status output is abbreviated:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
journalctl -u GENERATED.service -o short-precise | grep 'CRON_JOB='

The failure email may already contain the status and complete journal output, but querying the journal gives you timestamps, surrounding runs and the exact unit state. Check both the service and its associated timer if the timer did not trigger.

Classic cron jobs

Classic cron usually records start and execution messages through the system’s syslog destination. Depending on the distribution, inspect the configured syslog file or the journal for the cron daemon:

Rank #4
Sale
Vaydeer Wrist Rest for Keyboard and Mouse, Computer Ergonomic Wrist Support Pad, Soft Memory Foam Arm Cushion for Desk, Palm Hand Office Laptop Typing
  • 【Softer and More Comfortable】Vaydeer wrist rest has unique diamond pattern, which is the combination of softness and aesthetics. The materials of wrist rest are improved into higher quality memory foam and covered with silky smooth lycra. The computer wrist rest makes you as comfortable and cushiony as like rest your wrists on clouds.
  • 【Ergonomic Wrist Saver】The wrist rests for keyboard and mouse comes with a 17.32×3.15×0.83 inch keyboard wrist pad and a 5.94×3.15×0.83 inch mouse wrist support. Based on ergonomic design, the unique concave shape is the perfect fit for your wrist joints. The wrist rest pad fits most computer keyboards and laptops, improve hand and wrist posture, release your wrist and arm stress.
  • 【Non-Slip Rubber Bottom】Featuring an anti-skid silicone base on the bottom, this wrist keyboard support stays firmly in place on your desk, preventing the padding from sliding around, ensuring stable and consistent wrist support during extended computer sessions.
  • 【Better Experience & Pain Relief】Our keyboard arm rest is beneficial to alleviate the soreness caused by direct contact and friction between your arm and a hard desk surface, reducing the risk of wrist fatigue or carpal tunnel. The soft texture of memory foam can evenly distribute the pressure around your wrists and provide good support with just enough give.
  • 【Helpful in Multiple Scenarios】Whether you're working, studying, writing, typing, gaming, this keyboard and mouse rest combo is an essential accessory to add comfort and support to your hands and wrists. It’s also a great gift for men, women, family, friend, coworker, gamer, teacher, etc.
journalctl -u cron --since "1 hour ago"
journalctl -u crond --since "1 hour ago"

Use the daemon name that exists on the host. If the crontab redirects output, inspect that file directly. A typical diagnostic line is:

15 2 * * * /usr/local/sbin/backup-job >>/var/log/backup-job.log 2>&1

Keep this redirection while validating the repair. Check file ownership, rotation and available disk space; an unwritable log can hide the original command output.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

5. Understand and test cron mail controls

MAILTO controls who receives cron mail. In classic cron, command output is mailed to the crontab owner or the address in MAILTO. In systemd-cron, the manual states that mail is always sent for failed jobs, with MAILTO selecting the recipient. An empty assignment such as MAILTO="" suppresses mail.

Check the effective setting in the relevant crontab and any system-wide file:

Best Value
Sale
Under Desk Cable Management Tray No Drill, Metal Mesh Cable Management Under Desk with Clamp Mount, 2 Hole Cable Tray with Wire Management and Cord Organizer for Home Office Standing Desk
  • 【No Drill Mounted】Cable management tray can be assembled in as little as 3 minutes or less-simply. Side clips easily clampe the edge of desk, pass through the holes on the sides, and secure excess cables with baskets. Desk cable management supports inward or outward installation to meet your needs in different scenarios, and provides you with great convenience when collecting and organizing wires.
  • 【Rubber Pad Protects Desk】Wire organizer under desk built-in soft rubber pads on the clamp protect your desk from scratches, so you will not damage your furniture or office.
  • 【Sturdy and Beautiful】Cord management under desk is made of high-quality carbon steel and holds about 15 lbs. The wire basket has 2 holes on each side of the tray to enable your cables to pass freely. Cable baskets are suitable for desk thickness use from 0.4" to 2.4".
  • 【Space Saving & Keep Organized】Desk cable management tray holds all your power cords, outlet strips, USB hubs and computer transformers hidden from your feet, and the data cables will not enter the vacuum cleaner to keep your desk clean and tidy. Desk wire organizer is also suitable for use in the kitchen and outdoors.
  • 【Reduce Safety Risks】Cable tray under desk keeps all plugs away from your kids, no more worry about tripping. Using 2 holes wire tray saves extra space, helps you easily cabling and wire protection. The mesh design is not easy to accumulate dust, but avoids safety accidents caused by messy wires.
crontab -l | sed -n '1,20p'
sudo grep -R '^MAILTO' /etc/crontab /etc/cron.d 2>/dev/null

Do not silence a noisy job by setting an empty MAILTO before it is healthy. You may hide a genuine failure and lose the only evidence of a regression.

When the job fails but no email arrives

  • Confirm the job actually ran by checking the cron or systemd log.
  • Verify that MAILTO is not empty and contains the intended address.
  • Check that a local sendmail-compatible transport is installed and accepting messages.
  • Inspect mail-system logs for queueing, rejection, DNS, authentication or delivery-delay errors.
  • Compare the envelope recipient with the visible To header; aliases can redirect mail.

Mail delivery is a separate failure path from command execution. A successful local handoff does not prove that the message reached an external mailbox, so keep log-based monitoring for jobs whose failure must page someone.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

6. Fix the first causal error

Work from the earliest concrete failure, not the final cascade. For example, correct a missing executable before changing a later “file not found” symptom, and repair a permission problem before increasing retries.

  • “command not found”: Replace the bare command with its absolute path or set an explicit PATH; confirm the file is executable.
  • “No such file or directory”: Check the working directory, spelling, mount availability and interpreter path in the script’s shebang.
  • Permission denied: Verify account ownership and directory traversal permissions. Do not make a file world-writable as a shortcut.
  • Authentication or secret errors: Provide the intended credential source to the cron identity and restrict its permissions.
  • Network or service-not-ready errors: Confirm dependency readiness at the scheduled time. Add bounded retries only when repeating the operation is safe.
  • Unexpected duplicate effects: Find and disable the extra cron, anacron, native timer or cron daemon before rerunning a non-idempotent command.
  • Incorrect schedule: Correct the expression after checking server time zone and daylight-saving behavior; document the intended time zone where the implementation supports it.

Keep output capture enabled until the command succeeds in the real scheduler context. Remove sensitive values from logs, but do not discard diagnostics that are needed to prove the repair.

7. Verify the repair in two stages

  1. Run once manually as the cron identity. Use the exact command, directory and environment that the scheduler will use. Record the exit status:
sudo -u USER -H /bin/sh -c 'cd /absolute/working/directory && /absolute/path/to/command'; echo "exit=$?"
  1. Check the intended side effect. Confirm the backup artifact, report, database change, queue message or other expected result—not merely a zero exit code.
  2. Trigger or wait for one scheduled run. For a systemd timer, use the unit’s normal test procedure or wait for its next elapse; for classic cron, wait for the next matching minute. Avoid creating an ad-hoc second schedule that could be mistaken for the production job.
  3. Compare logs and notification behavior. Confirm one execution, the expected output, a successful status and the absence of an unexpected failure email. For systemd-cron, inspect the generated service journal; for classic cron, inspect syslog and the explicit log file.

8. Prevent the next failure

Once the job is healthy, make its assumptions visible and its failure observable.

  • Use a wrapper script with strict, reviewed paths and a deliberate environment.
  • Write structured, timestamped logs to a location with rotation and sufficient disk space.
  • Make operations idempotent where possible so a retry or accidental duplicate does not corrupt data.
  • Use bounded retries for transient dependencies, with delays that fit the job’s deadline.
  • Document the owning user, schedule, time zone, input paths, credentials and expected side effect.
  • Keep local mail enabled during validation and test the sendmail-compatible transport separately.
  • Add external cron job monitoring or external failure alerts when a missed run must be detected even if the server, scheduler or local mail system is unavailable.

Classic cron and systemd-cron: what changes during diagnosis?

Diagnostic aspect Classic cron systemd-cron
Where output is logged Daemon syslog destination, plus any redirection in the job line Journal for the generated service; output is associated with the generated unit
Failure-mail format Command output is mailed to the crontab owner or MAILTO recipient Failed-job mail includes systemctl status and the full failed-run journal output by default
How to identify a run Crontab entry, daemon log and the command’s explicit log file Generated service or timer; journal entries include CRON_JOB= with the job line
Timer precedence Runs according to the cron daemon’s installed crontab Native systemd timers override cron jobs with the same name
Duplicate-execution risk Can occur if another scheduler defines the same command Running systemd-cron alongside a cron daemon can execute scripts multiple times

The table describes the documented behavior of these implementations. Other cron variants can differ, so use the commands and unit names present on your server as the authority.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.