System
View, add, and manage scheduled backend jobs. Changes take effect immediately.
Installed Status
sudo /mnt/drive3/customerdb/install_customerdb_cron.sh on the server to refresh the installed file.
Scheduled Jobs
| Job | Schedule | Command | Status | Last Run | |
|---|---|---|---|---|---|
|
Next-Day Customer Emails
Sends pickup reminder emails to customers whose appointment is tomorrow.
|
0 20 * * *
Daily at 20:00
|
php8.3 /mnt/drive3/customerdb/backend/jobs/send_nextday_customer_emails.php |
Enabled
✓ OK |
2026-07-09 00:00 Output[2026-07-08 20:00:01 EDT] Next-day customer email job starting.
Business TZ: America/New_York
Server TZ: UTC
Today: 2026-07-08
Tomorrow: 2026-07-09
Import first: synced tomorrow (2026-07-09) appointments.
fetched=0, visits_created=0, orders_created=0
Raw next-day outreach rows: 0
Emailable raw rows: 0
Found 0 customer(s) with tomorrow's pickup after dedupe.
Nothing to send. Exiting.
|
|
|
Morning Import
Runs the morning import at 6:00 AM for today.
|
0 6 * * *
Daily at 6:00
|
php8.3 /mnt/drive3/customerdb/backend/jobs/smoke_morning_jobs.php && php8.3 /mnt/drive3/customerdb/backend/jobs/run_morning_jobs.php $(date +\%F) |
Enabled
✓ OK |
2026-07-09 10:00 OutputMorning jobs smoke test passed. Bootstrap and service functions are available. binary=/usr/bin/php8.3 version=8.3.6
{"ok":true,"job_run_id":156,"start_date":"2026-07-09","end_date":"2026-07-09","setmore_sync":{"start_date":"2026-07-09","end_date":"2026-07-09","appointments_fetched":0,"customers_created":0,"visits_created":0,"orders_created":0,"appointments_synced":0,"appointments_skipped_out_of_range":0,"appointments_skipped_placeholder_name":0,"appointments_skipped_missing_identity":0,"appointments_skipped_canceled":0},"daily_totals":[],"appointments":[]}
|
|
|
Morning Jobs
Runs appointment sync, workflow updates, and morning report generation.
|
0 9 * * *
Daily at 9:00
|
php8.3 /mnt/drive3/customerdb/frontend/api/send_reminders.php |
Disabled | — | |
|
Nightly Reports
Generates and emails nightly summary reports.
|
0 18 * * *
Daily at 18:00
|
php8.3 /mnt/drive3/customerdb/backend/jobs/send_nightly_reports.php |
Enabled
✓ OK |
2026-07-08 22:00 Output{"success":true,"message":"Sent via SMTP (PHPMailer)","to_email":"admin@ellasalterations.com","date":"2026-07-08"}
|
|
|
Database Backup
Full MariaDB backup to backup directory.
|
0 2 * * *
Daily at 2:00
|
bash /mnt/drive3/customerdb/backup.sh |
Enabled
✓ OK |
2026-07-09 06:05 Output[2026-07-09 02:00:01] ── Backup starting ── [2026-07-09 02:00:01] Dumping database ellas_alterations … [2026-07-09 02:00:01] ✓ Database backup: /mnt/drive3/customerdb/backups/db_20260709_020001.sql.gz (39M) [2026-07-09 02:00:01] Archiving app files … [2026-07-09 02:00:01] ✓ Files backup: /mnt/drive3/customerdb/backups/files_20260709_020001.tar.gz (2.4G) [2026-07-09 02:00:01] Archiving PDF reports … [2026-07-09 02:00:01] ✗ Reports backup FAILED [2026-07-09 02:00:01] Removing backups older than 30 days … [2026-07-09 02:00:01] ✓ Backup complete. Total backup storage: 36G [2026-07-09 02:00:01] ── Done ── |
|
|
Daily Cleanup
Removes temp files and old logs.
|
0 4 * * *
Daily at 4:00
|
php8.3 /mnt/drive3/customerdb/backend/jobs/daily_cleanup.php |
Enabled
✓ OK |
2026-07-09 08:00 Output[2026-07-09 08:00:02] Daily cleanup completed. /mnt/drive3/customerdb/tmp: scanned=0 deleted=0 /mnt/drive3/customerdb/backend/tmp: scanned=0 deleted=0 /mnt/drive3/customerdb/webui/tmp: scanned=0 deleted=0 logs_trimmed=0 cron_job_run_deleted=7 |
|
|
Cleanup Repo Branch Folders
Deletes folders older than 5 days from /mnt/drive3/customerdb_repo/branches using /mnt/drive1/scripts/cleanup_customerdb_branches.sh.
|
20 3 * * *
Daily at 3:20
|
bash /mnt/drive1/scripts/cleanup_customerdb_branches.sh |
Enabled | — | |
|
Add Name Records Auto Delete
Deletes placeholder Add Name customer records that have no visits, orders, payments, phone, or email.
|
20 4 * * *
Daily at 4:20
|
php8.3 /mnt/drive3/customerdb/backend/jobs/delete_add_name_records.php |
Enabled
✓ OK |
2026-07-09 08:20 Output[2026-07-09 08:20:01] Add Name cleanup (orphan mode) starting. Found 0 record(s). [2026-07-09 08:20:01] Done. Deleted 0 Add Name record(s). |
|
|
Report Queue Processor
Processes queued report generation tasks and retries missing receipt/work-order PDFs.
|
5 * * * *
5 * * * *
|
php8.3 /mnt/drive3/customerdb/backend/jobs/process_report_generation_queue.php --limit=300 |
Enabled | — | |
|
Report Missing Backfill (Today)
Hourly repair pass for today's visits to generate missing required reports.
|
10 * * * *
10 * * * *
|
php8.3 /mnt/drive3/customerdb/backend/jobs/backfill_missing_visit_reports.php --days=1 --limit=500 --timeout=70 |
Enabled | — | |
|
Report Missing Alert
Logs/alerts when paid or completed visits are missing required reports.
|
15 * * * *
15 * * * *
|
php8.3 /mnt/drive3/customerdb/backend/jobs/report_alert_missing.php |
Enabled | — | |
|
Report Renderer Health Check
Runs a lightweight PDF renderer health check and stores status.
|
20 * * * *
20 * * * *
|
php8.3 /mnt/drive3/customerdb/backend/jobs/report_renderer_health_check.php |
Enabled | — | |
|
Weekly Report Integrity Export
Exports weekly report completeness CSV for audit/compliance review.
|
0 6 * * 1
Weekly (Mon) at 6:00
|
php8.3 /mnt/drive3/customerdb/backend/jobs/export_weekly_report_integrity.php |
Enabled | — |
sudo cp /tmp/customerdb_crontab_export.txt /etc/cron.d/customerdb && sudo chmod 644 /etc/cron.d/customerdb
The export file is regenerated automatically whenever you save, toggle, or delete a job. Exported jobs now run through the cron wrapper so scheduled runs can log history and send notifications.
Recent Runs
Morning jobs smoke test passed. Bootstrap and service functions are available. binary=/usr/bin/php8.3 version=8.3.6
{"ok":true,"job_run_id":156,"start_date":"2026-07-09","end_date":"2026-07-09","setmore_sync":{"start_date":"2026-07-09","end_date":"2026-07-09","appointments_fetched":0,"customers_created":0,"visits_created":0,"orders_created":0,"appointments_synced":0,"appointments_skipped_out_of_range":0,"appointments_skipped_placeholder_name":0,"appointments_skipped_missing_identity":0,"appointments_skipped_canceled":0},"daily_totals":[],"appointments":[]}
[2026-07-09 08:20:01] Add Name cleanup (orphan mode) starting. Found 0 record(s). [2026-07-09 08:20:01] Done. Deleted 0 Add Name record(s).
[2026-07-09 08:00:02] Daily cleanup completed. /mnt/drive3/customerdb/tmp: scanned=0 deleted=0 /mnt/drive3/customerdb/backend/tmp: scanned=0 deleted=0 /mnt/drive3/customerdb/webui/tmp: scanned=0 deleted=0 logs_trimmed=0 cron_job_run_deleted=7
[2026-07-09 02:00:01] ── Backup starting ── [2026-07-09 02:00:01] Dumping database ellas_alterations … [2026-07-09 02:00:01] ✓ Database backup: /mnt/drive3/customerdb/backups/db_20260709_020001.sql.gz (39M) [2026-07-09 02:00:01] Archiving app files … [2026-07-09 02:00:01] ✓ Files backup: /mnt/drive3/customerdb/backups/files_20260709_020001.tar.gz (2.4G) [2026-07-09 02:00:01] Archiving PDF reports … [2026-07-09 02:00:01] ✗ Reports backup FAILED [2026-07-09 02:00:01] Removing backups older than 30 days … [2026-07-09 02:00:01] ✓ Backup complete. Total backup storage: 36G [2026-07-09 02:00:01] ── Done ──
[2026-07-08 20:00:01 EDT] Next-day customer email job starting.
Business TZ: America/New_York
Server TZ: UTC
Today: 2026-07-08
Tomorrow: 2026-07-09
Import first: synced tomorrow (2026-07-09) appointments.
fetched=0, visits_created=0, orders_created=0
Raw next-day outreach rows: 0
Emailable raw rows: 0
Found 0 customer(s) with tomorrow's pickup after dedupe.
Nothing to send. Exiting.
{"success":true,"message":"Sent via SMTP (PHPMailer)","to_email":"admin@ellasalterations.com","date":"2026-07-08"}
Morning jobs smoke test passed. Bootstrap and service functions are available. binary=/usr/bin/php8.3 version=8.3.6
{"ok":true,"job_run_id":155,"start_date":"2026-07-08","end_date":"2026-07-08","setmore_sync":{"start_date":"2026-07-08","end_date":"2026-07-08","appointments_fetched":0,"customers_created":0,"visits_created":0,"orders_created":0,"appointments_synced":0,"appointments_skipped_out_of_range":0,"appointments_skipped_placeholder_name":0,"appointments_skipped_missing_identity":0,"appointments_skipped_canceled":0},"daily_totals":[],"appointments":[]}
[2026-07-08 08:20:01] Add Name cleanup (orphan mode) starting. Found 0 record(s). [2026-07-08 08:20:01] Done. Deleted 0 Add Name record(s).
[2026-07-08 08:00:01] Daily cleanup completed. /mnt/drive3/customerdb/tmp: scanned=0 deleted=0 /mnt/drive3/customerdb/backend/tmp: scanned=0 deleted=0 /mnt/drive3/customerdb/webui/tmp: scanned=0 deleted=0 logs_trimmed=0 cron_job_run_deleted=4
[2026-07-08 02:00:01] ── Backup starting ── [2026-07-08 02:00:01] Dumping database ellas_alterations … [2026-07-08 02:00:01] ✓ Database backup: /mnt/drive3/customerdb/backups/db_20260708_020001.sql.gz (39M) [2026-07-08 02:00:01] Archiving app files … [2026-07-08 02:00:01] ✓ Files backup: /mnt/drive3/customerdb/backups/files_20260708_020001.tar.gz (2.4G) [2026-07-08 02:00:01] Archiving PDF reports … [2026-07-08 02:00:01] ✗ Reports backup FAILED [2026-07-08 02:00:01] Removing backups older than 30 days … [2026-07-08 02:00:01] ✓ Backup complete. Total backup storage: 32G [2026-07-08 02:00:01] ── Done ──
[2026-07-07 20:00:01 EDT] Next-day customer email job starting.
Business TZ: America/New_York
Server TZ: UTC
Today: 2026-07-07
Tomorrow: 2026-07-08
Import first: synced tomorrow (2026-07-08) appointments.
fetched=0, visits_created=0, orders_created=0
Raw next-day outreach rows: 0
Emailable raw rows: 0
Found 0 customer(s) with tomorrow's pickup after dedupe.
Nothing to send. Exiting.
{"success":true,"message":"Sent via SMTP (PHPMailer)","to_email":"admin@ellasalterations.com","date":"2026-07-07"}
Morning jobs smoke test passed. Bootstrap and service functions are available. binary=/usr/bin/php8.3 version=8.3.6
{"ok":true,"job_run_id":154,"start_date":"2026-07-07","end_date":"2026-07-07","setmore_sync":{"start_date":"2026-07-07","end_date":"2026-07-07","appointments_fetched":0,"customers_created":0,"visits_created":0,"orders_created":0,"appointments_synced":0,"appointments_skipped_out_of_range":0,"appointments_skipped_placeholder_name":0,"appointments_skipped_missing_identity":0,"appointments_skipped_canceled":0},"daily_totals":[],"appointments":[]}
[2026-07-07 08:20:01] Add Name cleanup (orphan mode) starting. Found 0 record(s). [2026-07-07 08:20:01] Done. Deleted 0 Add Name record(s).
[2026-07-07 08:00:02] Daily cleanup completed. /mnt/drive3/customerdb/tmp: scanned=0 deleted=0 /mnt/drive3/customerdb/backend/tmp: scanned=0 deleted=0 /mnt/drive3/customerdb/webui/tmp: scanned=0 deleted=0 logs_trimmed=0 cron_job_run_deleted=7
[2026-07-07 02:00:01] ── Backup starting ── [2026-07-07 02:00:01] Dumping database ellas_alterations … [2026-07-07 02:00:01] ✓ Database backup: /mnt/drive3/customerdb/backups/db_20260707_020001.sql.gz (39M) [2026-07-07 02:00:01] Archiving app files … [2026-07-07 02:00:01] ✓ Files backup: /mnt/drive3/customerdb/backups/files_20260707_020001.tar.gz (2.4G) [2026-07-07 02:00:01] Archiving PDF reports … [2026-07-07 02:00:01] ✗ Reports backup FAILED [2026-07-07 02:00:01] Removing backups older than 30 days … [2026-07-07 02:00:01] ✓ Backup complete. Total backup storage: 27G [2026-07-07 02:00:01] ── Done ──
[2026-07-06 20:00:01 EDT] Next-day customer email job starting.
Business TZ: America/New_York
Server TZ: UTC
Today: 2026-07-06
Tomorrow: 2026-07-07
Import first: synced tomorrow (2026-07-07) appointments.
fetched=0, visits_created=0, orders_created=0
Raw next-day outreach rows: 0
Emailable raw rows: 0
Found 0 customer(s) with tomorrow's pickup after dedupe.
Nothing to send. Exiting.
{"success":true,"message":"Sent via SMTP (PHPMailer)","to_email":"admin@ellasalterations.com","date":"2026-07-06"}
Morning jobs smoke test passed. Bootstrap and service functions are available. binary=/usr/bin/php8.3 version=8.3.6
{"ok":true,"job_run_id":153,"start_date":"2026-07-06","end_date":"2026-07-06","setmore_sync":{"start_date":"2026-07-06","end_date":"2026-07-06","appointments_fetched":0,"customers_created":0,"visits_created":0,"orders_created":0,"appointments_synced":0,"appointments_skipped_out_of_range":0,"appointments_skipped_placeholder_name":0,"appointments_skipped_missing_identity":0,"appointments_skipped_canceled":0},"daily_totals":[],"appointments":[]}
[2026-07-06 08:20:01] Add Name cleanup (orphan mode) starting. Found 0 record(s). [2026-07-06 08:20:01] Done. Deleted 0 Add Name record(s).
[2026-07-06 08:00:01] Daily cleanup completed. /mnt/drive3/customerdb/tmp: scanned=0 deleted=0 /mnt/drive3/customerdb/backend/tmp: scanned=0 deleted=0 /mnt/drive3/customerdb/webui/tmp: scanned=0 deleted=0 logs_trimmed=0 cron_job_run_deleted=5
[2026-07-06 02:00:01] ── Backup starting ── [2026-07-06 02:00:01] Dumping database ellas_alterations … [2026-07-06 02:00:01] ✓ Database backup: /mnt/drive3/customerdb/backups/db_20260706_020001.sql.gz (39M) [2026-07-06 02:00:01] Archiving app files … [2026-07-06 02:00:01] ✓ Files backup: /mnt/drive3/customerdb/backups/files_20260706_020001.tar.gz (2.4G) [2026-07-06 02:00:01] Archiving PDF reports … [2026-07-06 02:00:01] ✗ Reports backup FAILED [2026-07-06 02:00:01] Removing backups older than 30 days … [2026-07-06 02:00:01] ✓ Backup complete. Total backup storage: 23G [2026-07-06 02:00:01] ── Done ──
[2026-07-05 20:00:01 EDT] Next-day customer email job starting.
Business TZ: America/New_York
Server TZ: UTC
Today: 2026-07-05
Tomorrow: 2026-07-06
Import first: synced tomorrow (2026-07-06) appointments.
fetched=0, visits_created=0, orders_created=0
Raw next-day outreach rows: 0
Emailable raw rows: 0
Found 0 customer(s) with tomorrow's pickup after dedupe.
Nothing to send. Exiting.
{"success":true,"message":"Sent via SMTP (PHPMailer)","to_email":"admin@ellasalterations.com","date":"2026-07-05"}
Morning jobs smoke test passed. Bootstrap and service functions are available. binary=/usr/bin/php8.3 version=8.3.6
{"ok":true,"job_run_id":152,"start_date":"2026-07-05","end_date":"2026-07-05","setmore_sync":{"start_date":"2026-07-05","end_date":"2026-07-05","appointments_fetched":0,"customers_created":0,"visits_created":0,"orders_created":0,"appointments_synced":0,"appointments_skipped_out_of_range":0,"appointments_skipped_placeholder_name":0,"appointments_skipped_missing_identity":0,"appointments_skipped_canceled":0},"daily_totals":[],"appointments":[]}
Edit Job