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-05-09 00:00 Output[2026-05-09 00:00:01] Next-day customer email job starting.
Today: 2026-05-09
Tomorrow: 2026-05-10
Import first: synced tomorrow (2026-05-10) appointments.
fetched=6, visits_created=1, orders_created=1
Found 5 customer(s) with tomorrow's pickup.
→ Teresa McDonald <reesee71@yahoo.com> (May 10 2026 9:30 AM) ✓ sent
→ Luis A Pena Oneill <albertooneillpr@gmail.com> (May 10 2026 10:00 AM) ✓ sent
→ Ciara Florer <ciaranikole29@gmail.com> (May 10 2026 10:30 AM) ✓ sent
→ Kealey Herbert <kealeyherbert@yahoo.com> (May 10 2026 11:00 AM) ✓ sent
→ Jaclyn Neary <jneary715@gmail.com> (May 10 2026 1:00 PM) ✓ sent
[2026-05-09 00:00:12] Done. Sent: 5, Skipped: 0, Errors: 0
|
|
|
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-05-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":67,"start_date":"2026-05-09","end_date":"2026-05-09","setmore_sync":{"start_date":"2026-05-09","end_date":"2026-05-09","appointments_fetched":11,"customers_created":1,"visits_created":1,"orders_created":1,"appointments_synced":11,"appointments_skipped_out_of_range":0,"appointments_skipped_placeholder_name":0,"appointments_skipped_missing_identity":0,"appointments_skipped_canceled":0},"daily_totals":[{"report_date":"2026-05-09","total_customers":"6.00","new_customers":"6.00","cash_sales":"0.00","check_sales":"0.00","edwards":"0.00","credit_card_sales":"0.00","tips":"0.00","total_sales":"0.00","total_sales_no_edwards":"0.00"}],"appointments":[{"source":"setmore","source_key":"b71a37c5-9622-407d-84cc-b2d84399ed36","start_at":"2026-05-09 15:30:00","end_at":"2026-05-09 16:00:00","status_label":"No label","notes":"Drop off shirts and pants","customer_nam
|
|
|
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-05-08 22:00 Output{"success":true,"message":"Sent via SMTP (PHPMailer)","to_email":"admin@ellasalterations.com","date":"2026-05-08"}
|
|
|
Database Backup
Full MariaDB backup to backup directory.
|
0 2 * * *
Daily at 2:00
|
bash /mnt/drive3/customerdb/backup.sh |
Enabled
✓ OK |
2026-05-09 06:03 Output[2026-05-09 02:00:01] ── Backup starting ── [2026-05-09 02:00:01] Dumping database ellas_alterations … [2026-05-09 02:00:01] ✓ Database backup: /mnt/drive3/customerdb/backups/db_20260509_020001.sql.gz (12M) [2026-05-09 02:00:01] Archiving app files … [2026-05-09 02:00:01] ✓ Files backup: /mnt/drive3/customerdb/backups/files_20260509_020001.tar.gz (948M) [2026-05-09 02:00:01] Archiving PDF reports … [2026-05-09 02:00:01] ✗ Reports backup FAILED [2026-05-09 02:00:01] Removing backups older than 30 days … [2026-05-09 02:00:01] ✓ Backup complete. Total backup storage: 47G [2026-05-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-05-09 08:00 Output[2026-05-09 08:00:01] Daily cleanup completed. /mnt/drive3/customerdb/tmp: scanned=28 deleted=2 /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=0 |
|
|
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-05-09 08:20 Output[2026-05-09 08:20:01] Add Name cleanup (orphan mode) starting. Found 0 record(s). [2026-05-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":67,"start_date":"2026-05-09","end_date":"2026-05-09","setmore_sync":{"start_date":"2026-05-09","end_date":"2026-05-09","appointments_fetched":11,"customers_created":1,"visits_created":1,"orders_created":1,"appointments_synced":11,"appointments_skipped_out_of_range":0,"appointments_skipped_placeholder_name":0,"appointments_skipped_missing_identity":0,"appointments_skipped_canceled":0},"daily_totals":[{"report_date":"2026-05-09","total_customers":"6.00","new_customers":"6.00","cash_sales":"0.00","check_sales":"0.00","edwards":"0.00","credit_card_sales":"0.00","tips":"0.00","total_sales":"0.00","total_sales_no_edwards":"0.00"}],"appointments":[{"source":"setmore","source_key":"b71a37c5-9622-407d-84cc-b2d84399ed36","start_at":"2026-05-09 15:30:00","end_at":"2026-05-09 16:00:00","status_label":"No label","notes":"Drop off shirts and pants","customer_name":"Chad Cave","customer_email":"ccaveusf@hotmail.com","customer_phone":"8137275660","customer_id":"495296","visit_id":"129520","order_id":"106656","raw_payload":"{\"key\":\"b71a37c5-9622-407d-84cc-b2d84399ed36\",\"duration\":30,\"customer\":{\"key\":\"e6f73382-baee-4cd1-a060-ae962905a6b7\",\"company_key\":\"9fb0e573-a550-4b99-a08a-8e72d2d9a466\",\"contact_type\":\"Customer\",\"first_name\":\"Chad\",\"last_name\":\"Cave\",\"email_id\":\"ccaveusf@hotmail.com\",\"country_code\":\"1\",\"cell_phone\":\"8137275660\"},\"cost\":0,\"currency\":\"USD\",\"start_time\":\"2026-05-09T15:30Z\",\"end_time\":\"2026-05-09T16:00Z\",\"staff_key\":\"ra4a88b98cc3d542685380fe6a6f191a3e2f4045f-d\",\"service_key\":\"s27d2564532dabb25031131a0f6910432bdd1c1c8\",\"customer_key\":\"e6f73382-baee-4cd1-a060-ae962905a6b7\",\"comment\":\"Drop off shirts and pants\",\"label\":\"No label\"}","setmore_import_locked":"1"},{"source":"setmore","source_key":"c2f6bda5-f835-45bc-9172-71c2bec18b44","start_at":"2026-05-09 15:00
[2026-05-09 08:20:01] Add Name cleanup (orphan mode) starting. Found 0 record(s). [2026-05-09 08:20:01] Done. Deleted 0 Add Name record(s).
[2026-05-09 08:00:01] Daily cleanup completed. /mnt/drive3/customerdb/tmp: scanned=28 deleted=2 /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=0
[2026-05-09 02:00:01] ── Backup starting ── [2026-05-09 02:00:01] Dumping database ellas_alterations … [2026-05-09 02:00:01] ✓ Database backup: /mnt/drive3/customerdb/backups/db_20260509_020001.sql.gz (12M) [2026-05-09 02:00:01] Archiving app files … [2026-05-09 02:00:01] ✓ Files backup: /mnt/drive3/customerdb/backups/files_20260509_020001.tar.gz (948M) [2026-05-09 02:00:01] Archiving PDF reports … [2026-05-09 02:00:01] ✗ Reports backup FAILED [2026-05-09 02:00:01] Removing backups older than 30 days … [2026-05-09 02:00:01] ✓ Backup complete. Total backup storage: 47G [2026-05-09 02:00:01] ── Done ──
[2026-05-09 00:00:01] Next-day customer email job starting.
Today: 2026-05-09
Tomorrow: 2026-05-10
Import first: synced tomorrow (2026-05-10) appointments.
fetched=6, visits_created=1, orders_created=1
Found 5 customer(s) with tomorrow's pickup.
→ Teresa McDonald <reesee71@yahoo.com> (May 10 2026 9:30 AM) ✓ sent
→ Luis A Pena Oneill <albertooneillpr@gmail.com> (May 10 2026 10:00 AM) ✓ sent
→ Ciara Florer <ciaranikole29@gmail.com> (May 10 2026 10:30 AM) ✓ sent
→ Kealey Herbert <kealeyherbert@yahoo.com> (May 10 2026 11:00 AM) ✓ sent
→ Jaclyn Neary <jneary715@gmail.com> (May 10 2026 1:00 PM) ✓ sent
[2026-05-09 00:00:12] Done. Sent: 5, Skipped: 0, Errors: 0
{"success":true,"message":"Sent via SMTP (PHPMailer)","to_email":"admin@ellasalterations.com","date":"2026-05-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":63,"start_date":"2026-05-08","end_date":"2026-05-08","setmore_sync":{"start_date":"2026-05-08","end_date":"2026-05-08","appointments_fetched":8,"customers_created":2,"visits_created":2,"orders_created":2,"appointments_synced":8,"appointments_skipped_out_of_range":0,"appointments_skipped_placeholder_name":0,"appointments_skipped_missing_identity":0,"appointments_skipped_canceled":0},"daily_totals":[],"appointments":[{"source":"setmore","source_key":"36cdb539-7e95-4519-96f9-5e58bc3d74d6","start_at":"2026-05-08 15:00:00","end_at":"2026-05-08 15:30:00","status_label":"No label","notes":null,"customer_name":"Ella","customer_email":null,"customer_phone":null,"customer_id":"302526","visit_id":"129510","order_id":"106646","raw_payload":"{\"key\":\"36cdb539-7e95-4519-96f9-5e58bc3d74d6\",\"duration\":30,\"customer\":{\"key\":\"57265595-e473-4504-a9ff-04ec853d0616\",\"company_key\":\"9fb0e573-a550-4b99-a08a-8e72d2d9a466\",\"contact_type\":\"Customer\",\"first_name\":\"ella\"},\"cost\":0,\"currency\":\"EUR\",\"start_time\":\"2026-05-08T15:00Z\",\"end_time\":\"2026-05-08T15:30Z\",\"staff_key\":\"ra4a88b98cc3d542685380fe6a6f191a3e2f4045f-d\",\"service_key\":\"s27d2564532dabb25031131a0f6910432bdd1c1c8\",\"customer_key\":\"57265595-e473-4504-a9ff-04ec853d0616\",\"label\":\"No label\"}","setmore_import_locked":"1"},{"source":"setmore","source_key":"269bae1c-4b11-4ed1-936b-b87c9fc96b40","start_at":"2026-05-08 14:30:00","end_at":"2026-05-08 15:00:00","status_label":"No label","notes":null,"customer_name":"Beverly Oconnor","customer_email":"prolineman19@yahoo.com","customer_phone":"3529991306","customer_id":"3501","visit_id":"129386","order_id":"104139","raw_payload":"{\"key\":\"269bae1c-4b11-4ed1-936b-b87c9fc96b40\",\"duration\":30,\"customer\":{\"key\":\"ff819cfd-31f7-4bcb-afab-11adb217d8f8\",\"address\":\"7941 handcart rd\",\"city\":\"Wesley Cha
[2026-05-08 08:20:01] Add Name cleanup (orphan mode) starting. Found 0 record(s). [2026-05-08 08:20:01] Done. Deleted 0 Add Name record(s).
[2026-05-08 08:00:01] Daily cleanup completed. /mnt/drive3/customerdb/tmp: scanned=30 deleted=2 /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=0
[2026-05-08 02:00:01] ── Backup starting ── [2026-05-08 02:00:01] Dumping database ellas_alterations … [2026-05-08 02:00:01] ✓ Database backup: /mnt/drive3/customerdb/backups/db_20260508_020001.sql.gz (12M) [2026-05-08 02:00:01] Archiving app files … [2026-05-08 02:00:01] ✓ Files backup: /mnt/drive3/customerdb/backups/files_20260508_020001.tar.gz (948M) [2026-05-08 02:00:01] Archiving PDF reports … [2026-05-08 02:00:01] ✗ Reports backup FAILED [2026-05-08 02:00:01] Removing backups older than 30 days … [2026-05-08 02:00:01] ✓ Backup complete. Total backup storage: 46G [2026-05-08 02:00:01] ── Done ──
[2026-05-08 00:00:01] Next-day customer email job starting.
Today: 2026-05-08
Tomorrow: 2026-05-09
Import first: synced tomorrow (2026-05-09) appointments.
fetched=10, visits_created=4, orders_created=4
Found 9 customer(s) with tomorrow's pickup.
→ Femi Olawore <johnphillip4u@gmail.com> (May 09 2026 9:00 AM) ✓ sent
→ Darin Richter <dtsrichter@earthlink.net> (May 09 2026 9:30 AM) ✓ sent
→ Kristina Chace <ckkcchace@yahoo.com> (May 09 2026 10:00 AM) ✓ sent
→ Lauren Munson <laurenemmamunson@yahoo.com> (May 09 2026 11:00 AM) ✓ sent
→ Barbi Canfield <bvcountry08@yahoo.com> (May 09 2026 11:30 AM) ✓ sent
→ Lauren Dodzweit <schulze1014@aim.com> (May 09 2026 1:00 PM) ✓ sent
→ Chevy Stern <honeymstern@gmail.com> (May 09 2026 1:30 PM) ✓ sent
→ Liz Cochran <lizcochran73@gmail.com> (May 09 2026 2:00 PM) ✓ sent
→ Ramona Carmona <racepen126@gmail.com> (May 09 2026 3:00 PM) ✓ sent
[2026-05-08 00:00:20] Done. Sent: 9, Skipped: 0, Errors: 0
{"success":true,"message":"Sent via SMTP (PHPMailer)","to_email":"admin@ellasalterations.com","date":"2026-05-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":62,"start_date":"2026-05-07","end_date":"2026-05-07","setmore_sync":{"start_date":"2026-05-07","end_date":"2026-05-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-05-07 08:20:01] Add Name cleanup (orphan mode) starting. Found 0 record(s). [2026-05-07 08:20:01] Done. Deleted 0 Add Name record(s).
[2026-05-07 08:00:01] Daily cleanup completed. /mnt/drive3/customerdb/tmp: scanned=30 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=0
[2026-05-07 02:00:01] ── Backup starting ── [2026-05-07 02:00:01] Dumping database ellas_alterations … [2026-05-07 02:00:01] ✓ Database backup: /mnt/drive3/customerdb/backups/db_20260507_020001.sql.gz (12M) [2026-05-07 02:00:01] Archiving app files … [2026-05-07 02:00:01] ✓ Files backup: /mnt/drive3/customerdb/backups/files_20260507_020001.tar.gz (948M) [2026-05-07 02:00:01] Archiving PDF reports … [2026-05-07 02:00:01] ✗ Reports backup FAILED [2026-05-07 02:00:01] Removing backups older than 30 days … [2026-05-07 02:00:01] ✓ Backup complete. Total backup storage: 45G [2026-05-07 02:00:01] ── Done ──
[2026-05-07 00:00:01] Next-day customer email job starting.
Today: 2026-05-07
Tomorrow: 2026-05-08
Import first: synced tomorrow (2026-05-08) appointments.
fetched=6, visits_created=4, orders_created=4
Found 5 customer(s) with tomorrow's pickup.
→ Jennifer Ackett <jackett1970@gmail.com> (May 08 2026 9:00 AM) ✓ sent
→ Tammy Geiger <tammy.geiger@gmail.com> (May 08 2026 10:00 AM) ✓ sent
→ Jessica Boydston <boydstonbunch@gmail.com> (May 08 2026 10:30 AM) ✓ sent
→ Katherine Moreta <katherine.moreta@gmail.com> (May 08 2026 1:00 PM) ✓ sent
→ Beverly Oconnor <prolineman19@yahoo.com> (May 08 2026 2:30 PM) ✓ sent
[2026-05-07 00:00:12] Done. Sent: 5, Skipped: 0, Errors: 0
{"success":true,"message":"Sent via SMTP (PHPMailer)","to_email":"admin@ellasalterations.com","date":"2026-05-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":61,"start_date":"2026-05-06","end_date":"2026-05-06","setmore_sync":{"start_date":"2026-05-06","end_date":"2026-05-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-05-06 08:20:01] Add Name cleanup (orphan mode) starting. Found 0 record(s). [2026-05-06 08:20:01] Done. Deleted 0 Add Name record(s).
[2026-05-06 08:00:01] Daily cleanup completed. /mnt/drive3/customerdb/tmp: scanned=27 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=0
[2026-05-06 02:00:01] ── Backup starting ── [2026-05-06 02:00:01] Dumping database ellas_alterations … [2026-05-06 02:00:01] ✓ Database backup: /mnt/drive3/customerdb/backups/db_20260506_020001.sql.gz (12M) [2026-05-06 02:00:01] Archiving app files … [2026-05-06 02:00:01] ✓ Files backup: /mnt/drive3/customerdb/backups/files_20260506_020001.tar.gz (948M) [2026-05-06 02:00:01] Archiving PDF reports … [2026-05-06 02:00:01] ✗ Reports backup FAILED [2026-05-06 02:00:01] Removing backups older than 30 days … [2026-05-06 02:00:01] ✓ Backup complete. Total backup storage: 42G [2026-05-06 02:00:01] ── Done ──
[2026-05-06 00:00:02] Next-day customer email job starting.
Today: 2026-05-06
Tomorrow: 2026-05-07
Import first: synced tomorrow (2026-05-07) appointments.
fetched=0, visits_created=0, orders_created=0
Found 0 customer(s) with tomorrow's pickup.
Nothing to send. Exiting.
{"success":true,"message":"Sent via SMTP (PHPMailer)","to_email":"admin@ellasalterations.com","date":"2026-05-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":60,"start_date":"2026-05-05","end_date":"2026-05-05","setmore_sync":{"start_date":"2026-05-05","end_date":"2026-05-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