Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsA VPS cron failure is usually caused by one of a few layers: the job is in a different user’s crontab, the schedule or command is malformed, cron is stopped, the command depends on an interactive shell, permissions block execution, or the server was offline when the schedule was due. Diagnose in that order. Confirm the owning account, test the exact command with absolute paths, verify the cron service, capture output, inspect logs, and only then investigate systemd timers or missed-run behavior.
Antihost offers Linux VPS plans with full root access, unlimited traffic on a 1 Gbps port and a 14-day free trial.
Start with the account that owns the job
Every user has a separate crontab. A command in a user’s crontab runs with that user’s identity, permissions, home directory and environment. Installing a line in root’s crontab does not install it for an application account, and an application account cannot automatically read files that belong only to root.
As an Amazon Associate I earn from qualifying purchases.
List the crontab for the account that is supposed to run the task:
crontab -l
For a root-owned job, list root’s crontab explicitly:
#1 Best Overall
- [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
- [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
- [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
- [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
- [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.
sudo crontab -l
When you administer a VPS, write down the intended owner before changing anything. Typical choices include:
- Root: appropriate for operations that must modify protected system files, but dangerous for application code because a bug runs with unrestricted privileges.
- An application account: safer for deployments, queue workers and application maintenance, provided that account can access every required file.
- A dedicated service account: useful for backups or data-processing tasks that need a narrowly defined directory and set of permissions.
After identifying the account, test as that account rather than as your SSH login. A command that succeeds as root can fail for an application user because of file ownership, a different home directory or a missing credential.
Free tools Windows power users keep installed
One-click scans. No signup required.
sudo -u APPUSER -- /absolute/path/to/command
Replace APPUSER and the command with your real values. Do not add a shell through sudo -u unless the job itself genuinely requires one; reproducing the exact executable call exposes permission and path problems sooner.
Validate the crontab line before testing the server
A normal crontab entry has five schedule fields followed by the command:
minute hour day-of-month month day-of-week command
| Field | Values | Example |
|---|---|---|
| Minute | 0–59 | 15 |
| Hour | 0–23 | 2 |
| Day of month | 1–31 | 1 |
| Month | 1–12 | 4 |
| Day of week | 0–7, depending on implementation; Sunday is commonly 0 or 7 | 1-5 |
For example, this runs at 02:15 every day:
15 2 * * * /usr/local/bin/backup
Useful operators are a comma for a list (1,15), a hyphen for a range (1-5) and a slash for an interval (*/10). A line such as */10 * * * * runs every ten minutes, not ten minutes after the previous run.
Check the following details on the actual line:
- There are five schedule fields before the command. A sixth field is not a harmless extra field in a user crontab; it changes how the command is parsed.
- The time zone is the VPS’s configured time zone, not necessarily the zone on your laptop. Verify it with
timedatectlwhere available. - An inline comment can become part of an unquoted argument. Put comments on their own line while diagnosing.
- Shell metacharacters, spaces and percent signs may be interpreted differently than in an interactive shell. Put complex logic in a script and call that script from cron.
- Use a newline at the end of the crontab file. Some parsers handle a missing final newline poorly.
For a quick diagnostic, temporarily schedule a harmless command every few minutes. Use a file in a writable directory and remove the entry after confirmation:
*/5 * * * * /usr/bin/date >> /tmp/cron-test.log 2>&1
If that entry works, the scheduler is functioning and the original command needs investigation. Do not leave test jobs writing indefinitely to a small filesystem.
Remove interactive-shell assumptions
Cron starts a non-interactive process with a minimal environment. It does not read the same profile files as an SSH session, and its working directory is not the directory in which you happened to test the command.
Rank #2
- 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
- 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
- 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
- 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
- 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.
Use absolute executable and file paths
Find the executable used by the working command:
command -v php
command -v curl
command -v python3
Then put the returned path in the crontab, such as /usr/bin/php or /usr/bin/curl. Use absolute paths for scripts, configuration files, certificates and output files as well. A relative path may resolve somewhere unexpected when cron starts it.
Set the required environment explicitly
You can define variables at the top of a user crontab:
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
APP_ENV=production
HOME=/home/APPUSER
Only define values that are safe to store in a crontab. Do not put passwords or private tokens in a world-readable system file. Read secrets from a protected file or a service-specific secret store, and ensure the cron user can read that file without granting access to everyone else.
Choose the working directory deliberately
Scripts that use relative imports, templates or generated files should change directory themselves:
#!/bin/sh
set -eu
cd /srv/myapp
exec /usr/bin/php /srv/myapp/bin/maintenance.php
Save this wrapper with ownership and mode appropriate to the account that runs it, then schedule the wrapper with an absolute path. The set -eu options make unset variables and failed commands visible instead of allowing a later command to hide the original error. Add them only when the script is compatible with POSIX shell behavior.
For applications that require a virtual environment, runtime manager, working directory or profile setup, call the runtime directly or put the setup in the wrapper. Relying on an SSH shell startup file is a common reason a job works manually but fails from cron.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Check that cron or crond is running
The scheduler itself must be active. Service names differ by distribution family.
| Distribution style | Inspect status | Enable at boot |
|---|---|---|
| Debian or Ubuntu-style | sudo systemctl status cron |
sudo systemctl enable --now cron |
| Red Hat-style | sudo systemctl status crond |
sudo systemctl enable --now crond |
Use the service name that exists on your VPS; do not enable both. If the status shows a failed unit, read the error and recent journal entries before restarting:
Rank #3
- [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
- [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
- [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
- [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
- [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by
sudo journalctl -u cron --since today
sudo journalctl -u crond --since today
A successful restart does not prove that the job ran. It only proves that the scheduler started. After restarting, wait for a deliberately short test schedule and verify its output or log entry.
On a non-systemd installation, inspect the platform’s service manager and system log. The principle is the same: confirm that a scheduler process is running and configured to start after reboot.
Capture stdout, stderr and the exit status
By default, cron may deliver output through local mail, which is often not configured on a small VPS. During diagnosis, redirect both output streams to a dedicated log:
*/5 * * * * /usr/local/bin/myjob >> /var/log/myjob.log 2>&1
Use a log path writable by the job’s user. If the account cannot write to /var/log, create a directory with appropriate ownership or log under the application directory. A growing diagnostic log can fill a VPS, so rotate it or remove the temporary redirection when the cause is known.
Read the file immediately after a scheduled run:
tail -n 100 /var/log/myjob.log
Look for missing interpreters, permission errors, connection failures, invalid configuration, authentication errors and a command that exits before producing output. Add explicit success and failure messages in a wrapper when the underlying tool is quiet:
#!/bin/sh
set -eu
printf '%s startn' "$(/bin/date -Is)"
/usr/bin/curl --fail --silent --show-error https://example.invalid/health
printf '%s successn' "$(/bin/date -Is)"
The example URL is illustrative; substitute the endpoint required by your own service. The important parts are a nonzero exit on failure and timestamps that distinguish a new run from an old log line.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Inspect scheduler messages as well as application output:
sudo journalctl -u cron --since "1 hour ago"
sudo journalctl -u crond --since "1 hour ago"
sudo journalctl --since "1 hour ago" | grep -i cron
Some systems record cron activity through a syslog facility instead of a dedicated unit journal. Check the distribution’s standard system log if the journal contains no entries. Absence of a cron-start message points to service, syntax, file-placement or filtering problems; a start message followed by an application error points to the command itself.
Rank #4
- Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
- Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
- All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
- Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
- Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.
Inspect system-wide cron directories carefully
User crontabs and system-wide files are not interchangeable. Files under /etc/cron.d include an extra user field:
15 2 * * * APPUSER /usr/local/bin/backup
The fields are minute, hour, day of month, month, day of week, user, then command. Copying a user-crontab line into /etc/cron.d without the account field shifts every field and prevents the intended command from running.
Before troubleshooting the command, verify:
- The file is owned by the expected administrative account and has restrictive, sensible permissions.
- The filename uses only ASCII letters, digits, underscores or dashes. On Debian systems using generated cron services, names containing other characters can be ignored.
- The file has valid syntax and a final newline.
- The command’s user field names an existing account.
- Referenced scripts and directories are executable or searchable by that account.
Directories such as /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly and /etc/cron.monthly are commonly dispatched through run-parts. Their filenames and executable permissions therefore matter. A script can be present yet skipped if its name is rejected or it is not executable where the dispatcher requires that bit.
Do not place the same job in a user crontab, /etc/cron.d and a periodic directory while testing. Multiple valid entries can look like an intermittent failure when they actually run the task more than once.
Check permissions, filesystems and security controls
Run the command as the cron user and inspect every path in the chain:
Recommended Free Tools
sudo -u APPUSER -- /absolute/path/to/command
namei -l /srv/myapp/bin/maintenance.php
ls -l /srv/myapp/bin/maintenance.php
The account needs search (x) permission on every parent directory, read permission for scripts and configuration, and write permission for output, locks, caches or temporary files. A file can be readable while its parent directory blocks access.
Also check conditions that commonly affect VPS jobs:
- The filesystem is mounted read-only or is out of space: inspect
df -handdf -i. - A lock file from a previous run prevents a new run. Confirm whether the old process is still active before deleting a lock.
- Mandatory access controls or a host firewall block network access even though an interactive test from another account succeeds.
- The script has Windows line endings or an invalid interpreter path. An error such as “bad interpreter” often indicates a carriage return after the shebang.
- The job depends on a mounted volume, network service or database that is not ready when cron starts after boot.
For a script, make the interpreter explicit:
#!/usr/bin/env bash
Using /usr/bin/env still depends on a correct PATH; an absolute interpreter path is more predictable in a cron environment. Ensure the script is executable or invoke the interpreter directly, for example /bin/sh /srv/myapp/job.sh.
Best Value
When a VPS reboot appears to stop the job
A standard cron schedule does not automatically catch up when the VPS is powered off at the scheduled minute. If a job was due at 02:15 and the server was down from 02:00 through 03:00, the 02:15 run is normally missed. Once the service starts, cron waits for the next matching time.
First separate a missed run from a persistent failure:
- Confirm the VPS boot time with
uptime -sor the platform’s equivalent. - Check the scheduler service’s start time and journal.
- Run the command manually as the owning account.
- Wait for the next scheduled occurrence and watch the diagnostic log.
If every missed occurrence must be processed, choose a scheduler designed for persistence. An anacron-style approach can run periodic work after the machine returns, while a persistent systemd timer can record and handle elapsed time according to its configuration. The correct behavior depends on whether you need exactly one run after downtime, every missed interval, or simply the next normal occurrence.
Do not add anacron, a native systemd timer and cron for the same task without a deliberate plan. Debian’s systemd-cron arrangements can translate crontabs into generated .timer and .service units, and a native timer with a matching name can replace or override a legacy schedule. Duplicate implementations can execute a job more than once.
Check for systemd timers before creating another schedule
On a systemd VPS, list all timers, including inactive ones:
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOutdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchsystemctl list-timers --all
Look for a timer that already invokes the command, a generated unit corresponding to the crontab, or a native unit that uses the same service name. Inspect a candidate unit and its recent output:
systemctl cat example.timer
systemctl status example.timer
systemctl status example.service
journalctl -u example.timer --since today
journalctl -u example.service --since today
Generated names vary by distribution and conversion package, so inspect the list rather than guessing a unit name. If a timer exists, fix that timer’s service, environment or dependencies instead of adding a second cron line.
Cron versus a systemd timer: choose one scheduler per job
| Decision factor | Cron | Systemd timer |
|---|---|---|
| Portability | Available across a wide range of Unix-like systems and VPS images. | Requires systemd; common on current VPS distributions but not universal. |
| Observability | Usually relies on cron and syslog/journal messages plus your own redirection. | Provides timer and service status, dependency information and journal integration. |
| Missed schedules | Normal schedules do not automatically catch up after downtime. | Can express persistent or boot-relative behavior when configured for it. |
| Dependencies | Requires wrappers or ad-hoc checks for mounts and services. | Can declare ordering and requirements through unit relationships. |
| Environment isolation | Needs explicit variables, paths and working-directory handling. | Separates a timer from a service and can define service-level environment and sandboxing. |
| Duplicate-run risk | Easy to create accidental duplicates when combined with generated timers. | Easy to create accidental duplicates when a legacy cron entry remains. |
Keep cron for a simple, portable schedule when its non-persistent behavior is acceptable. Prefer a native systemd timer when you need unit-level status, dependency ordering, journal visibility or deliberate handling of downtime. Whichever you choose, document the owning account, command, schedule, log location and recovery behavior.
A complete troubleshooting sequence
- Identify the owner. List
crontab -lfor the application account orsudo crontab -lfor root. Check whether the entry is actually present. - Read the five schedule fields. Confirm timezone, ranges, intervals, comments, quoting and the next expected run.
- Use absolute paths. Replace commands such as
phporcurlwith their full paths and define required variables. - Set the working directory. Change directory in a wrapper or use absolute paths for every input and output.
- Reproduce as the cron user. Run the exact command with
sudo -u APPUSER --. - Verify the service. Check
cronorcrond, then enable the correct service at boot if necessary. - Capture output. Temporarily redirect stdout and stderr to a writable, monitored log.
- Read both logs. Inspect the job log and
journalctl -u cronorjournalctl -u crond, plus the system log if required. - Audit system files. For
/etc/cron.dand periodic directories, verify the user field, ownership, mode, executable status and allowed filename characters. - Check timers and downtime. Run
systemctl list-timers --all, inspect generated units and decide whether missed-run persistence is required. - Remove duplicates. Leave one authoritative scheduler for the job and record why that scheduler was selected.
Prevent the next cron failure
- Keep the command in a version-controlled wrapper with an explicit interpreter,
PATH, working directory and meaningful exit codes. - Write logs to a monitored location and configure rotation before a high-frequency job runs in production.
- Use a lock or an equivalent concurrency control when overlapping runs could corrupt data, and make the lock handling safe after crashes.
- Make dependencies visible: wait for a database or mount only with a bounded timeout, then exit nonzero if it is unavailable.
- Record the intended account and timezone next to the schedule.
- After every VPS rebuild or migration, verify the crontab, service enablement, credentials, filesystem permissions and next successful run.
- Alert on failure rather than relying on local cron mail that may never be delivered.
The fastest reliable diagnosis is layered: prove the entry exists for the right user, prove the scheduler is alive, prove the command works in cron’s environment, and use logs to distinguish a scheduler omission from an application error. Once those facts are established, choose either cron or one systemd timer for the job and remove every competing schedule.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errorsQuick Recap
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.

