mb-cron Service¶
Scheduled task execution daemon for automated maintenance and housekeeping.
Overview¶
mb-cron manages all scheduled tasks in Mailborder:
- Signature updates - Virus and spam definitions
- Database maintenance - Cleanup and optimization
- Backup automation - Scheduled backups
- Report generation - Automated reports
- Log rotation - Archive old logs
- Cleanup tasks - Remove expired data
Runs as SystemD timer (every 5 minutes by default).
Architecture¶
Timer System¶
Uses SystemD timer instead of traditional cron:
mb-cron.timer (triggers every 5 min)
↓
mb-cron.service (oneshot)
↓
mb-cron script
↓
Execute scheduled tasks
Task Types¶
- Frequent (every 5 min):
- Health checks
-
Queue monitoring
-
Hourly:
- Signature updates
-
Statistics aggregation
-
Daily:
- Database cleanup
- Log rotation
-
Report generation
-
Weekly:
- Database optimization
-
Backup verification
-
Monthly:
- Archive old data
- Full system maintenance
Configuration¶
Service Files¶
Timer: /etc/systemd/system/mb-cron.timer
[Unit]
Description=Mailborder Cron Timer
Requires=mb-cron.service
[Timer]
OnCalendar=*:0/5 # Every 5 minutes
Persistent=true
[Install]
WantedBy=timers.target
Service: /etc/systemd/system/mb-cron.service
[Unit]
Description=Mailborder Cron Service
After=network.target mb-rpcd.service
[Service]
Type=oneshot
User=mailborder
Group=mailborder
ExecStart=/usr/libexec/mailborder/php_enc/mb-cron run
Task Schedule¶
Configure schedules:
# Update frequency
sudo mb-config set cron.signature_update_schedule "hourly"
sudo mb-config set cron.backup_schedule "daily 02:00"
sudo mb-config set cron.report_schedule "daily 08:00"
# Cleanup
sudo mb-config set cron.log_cleanup_schedule "daily 03:00"
sudo mb-config set cron.quarantine_cleanup_schedule "daily 04:00"
Operations¶
Enable/Disable Timer¶
Enable:
Disable:
Status:
Manual Execution¶
Run all tasks:
Run specific task:
sudo mb-cron run --task signature_update
sudo mb-cron run --task database_cleanup
sudo mb-cron run --task backup
View Schedule¶
List configured tasks:
Example output:
Scheduled Tasks
===============
Frequent (every 5 min):
- health_check
- queue_monitor
Hourly (at :15):
- signature_update
- stats_aggregate
Daily:
- database_cleanup (03:00)
- log_rotation (03:30)
- quarantine_cleanup (04:00)
- backup (02:00)
- reports (08:00)
Weekly (Sunday 01:00):
- database_optimize
- backup_verify
Monthly (1st, 02:00):
- archive_old_data
- full_maintenance
Scheduled Tasks¶
Signature Updates¶
What it does: - Updates ClamAV virus signatures - Updates Rspamd spam rules - Updates GeoIP database
Frequency: Hourly
Manual trigger:
Database Cleanup¶
What it does: - Deletes old audit logs (>90 days) - Deletes old email logs (>30 days) - Deletes old sessions - Removes expired entries
Frequency: Daily at 03:00
Manual trigger:
Log Rotation¶
What it does: - Rotates service logs - Compresses old logs - Deletes logs >30 days
Frequency: Daily at 03:30
Manual trigger:
Quarantine Cleanup¶
What it does: - Deletes quarantine >30 days - Removes orphaned attachments - Updates statistics
Frequency: Daily at 04:00
Manual trigger:
Automated Backups¶
What it does: - Backs up configuration - Backs up database - Uploads to remote storage - Verifies backup integrity
Frequency: Daily at 02:00
Manual trigger:
Report Generation¶
What it does: - Generates daily summary - Emails to administrators - Archives report
Frequency: Daily at 08:00
Manual trigger:
Monitoring¶
Task History¶
View recent executions:
Example output:
Recent Task Executions
======================
2025-01-13 14:00:00 signature_update SUCCESS 2.3s
2025-01-13 13:00:00 signature_update SUCCESS 2.1s
2025-01-13 08:00:00 reports SUCCESS 5.4s
2025-01-13 04:00:00 quarantine_cleanup SUCCESS 12.1s
2025-01-13 03:30:00 log_rotation SUCCESS 1.8s
2025-01-13 03:00:00 database_cleanup SUCCESS 8.7s
2025-01-13 02:00:00 backup SUCCESS 45.2s
Task Logs¶
View cron log:
SystemD journal:
Filter by task:
Failed Tasks¶
Check for failures:
Alert on failures:
# Automatically emails admin when task fails
sudo mb-config set cron.alert_on_failure true
sudo mb-config set cron.alert_email admin@example.com
Troubleshooting¶
Timer Not Running¶
Check timer status:
Enable if disabled:
Verify next run:
Task Failing¶
Check logs:
Run manually with debug:
Common issues: - Disk full (backups fail) - Database connection timeout - Permission errors - Network issues (remote backups)
Task Taking Too Long¶
Check task duration:
Optimize: - Database cleanup: Reduce retention - Backups: Exclude large data - Reports: Reduce date range
Best Practices¶
Scheduling¶
- Spread heavy tasks - Don't run all at 02:00
- Order dependencies - Cleanup before backup
- Off-peak times - Schedule during low traffic
- Monitor duration - Alert if task runs too long
Maintenance¶
- Review logs weekly - Check for failed tasks
- Adjust schedules - Based on actual needs
- Test manually - Before enabling automation
- Document changes - Track schedule modifications
Alerting¶
# Enable comprehensive alerts
sudo mb-config set cron.alert_on_failure true
sudo mb-config set cron.alert_on_slow true
sudo mb-config set cron.slow_threshold 300 # 5 minutes