Installation & Setup

Set up Cron Jobs for Senddera

Background tasks for sending, automations, and queue processing.

Mar 5, 2026·10 min read· Intermediate

Senddera relies on Laravel’s scheduler and queue system for campaigns, automations, bounce processing, and housekeeping. On a VPS you typically use cron + Supervisor; on shared hosting, cron alone is usually the only option. This guide covers both.

What must run in the background

TaskMechanism
Scheduled campaigns, automations, recurring jobsphp artisan schedule:run every minute
Email queue (sends, imports)php artisan queue:work (Supervisor) or periodic queue:work --stop-when-empty
Some installs: queue:restart after deployManual or deploy script

If cron is missing, symptoms include campaigns stuck in “Sending”, automations never triggering, and emails stuck in queue.

1. Laravel scheduler (every server)

Add one crontab entry as the user that owns the app (not root):

crontab -e

Insert:

* * * * * cd /var/www/senddera && php artisan schedule:run >> /dev/null 2>&1

Adjust /var/www/senddera to your install path. On cPanel, use the full path to PHP from which php.

Verify after a minute:

grep schedule /var/www/senddera/storage/logs/laravel.log

2. Queue workers (VPS — recommended)

For production volume, run persistent workers with Supervisor. Install on Ubuntu:

sudo apt-get install -y supervisor

Create /etc/supervisor/conf.d/senddera-worker.conf:

[program:senddera-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/senddera/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/senddera/storage/logs/worker.log
stopwaitsecs=3600

Then:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status

See also Queue workers and cron and Redis for queues.

3. Shared hosting without Supervisor

Add a second cron job every minute (same user):

* * * * * cd /home/USER/senddera && php artisan queue:work --stop-when-empty --max-time=55 >> /dev/null 2>&1

--max-time=55 prevents overlap with the next minute’s run. This is slower than Supervisor but works on cPanel.

4. Queue driver in .env

QUEUE_CONNECTION=database
# or, on VPS with Redis:
QUEUE_CONNECTION=redis

After changing .env:

php artisan config:clear
php artisan queue:restart

5. After code upgrades

Whenever you deploy new PHP code, restart workers so they load fresh code:

php artisan queue:restart
sudo supervisorctl restart senddera-worker:*

Full upgrade flow: Upgrade Senddera.

Troubleshooting cron

  • Wrong PHP binary — cron may use PHP 7.x while the site uses 8.3; use full path /usr/bin/php8.3
  • Wrong user — crontab must be the app owner so storage/ is writable
  • Permissionsstorage/logs must be writable
  • Timezone — server TZ vs app APP_TIMEZONE affects “send at 9am” campaigns

Run your email marketing on your own server

Full source code, no subscriber tax, unlimited sending. One-time $74 license, lifetime updates.

Get Senddera — $74 one-time