Cron Jobs
Last updated
/jabali-panel/cron. Scheduled commands that run under your account (M8).
Adding a cron job
Click Add cron job, supply:
- Name: operator label.
- Schedule: 5-field cron (
min hour day month dow). Examples:0 3 * * *(daily at 03:00),*/15 * * * *(every 15 minutes),0 0 1 * *(first day of each month at midnight). - Command: must be on the allowlist (see below).
On save, the agent creates two systemd-user units in your home:
~/.config/systemd/user/jabali-cron-<id>.service, the command.~/.config/systemd/user/jabali-cron-<id>.timer, the schedule.
Both are owned by you. The first time you add a cron job, systemd lingering is enabled for your account (loginctl enable-linger <your-username>) so timers fire even when you are not actively logged in.
Command allowlist
The panel does not allow arbitrary shell commands. The allowlist includes:
php(with any args)wp(WP-CLI; with any args)python/python3nodecurl(limited to your domains)
The allowlist is configurable by the operator; ask if you need a command not currently listed.
Why systemd-user, not crontab
- Per-job journal logs (
journalctl --user -u jabali-cron-<id>). OnFailure=triggers a notification through the M14 dispatcher.RandomizedDelaySec=provides natural jitter without addingsleep $RANDOMto your command.- You do not need an interactive shell to manage your cron jobs (and you do not have one).
Editing and deleting
Per-row Edit changes the schedule or command. Delete removes both unit files; the reconciler converges within 60 seconds.
Running on demand
Per-row Run now triggers the service unit immediately, bypassing the timer. Useful for testing a new cron job without waiting for the next scheduled fire.
Common cron patterns
- WordPress:
wp cron event run --due-now --url=https://example.comevery 15 minutes (replaces WP’s built-in pseudo-cron, which fires only on page hits). - Maintenance: a custom PHP script to clean up old uploads daily.
- Backups: a
mysqldumpto your own off-site target (this is on top of the panel’saccount_fullbackups).
Failure handling
If a cron job exits non-zero, the OnFailure= hook fires the cron_failed notification event. You can route this to your in-app bell or email under Profile → Notifications.