Files
cronmaster/howto/LOGS.md

3.1 KiB

Job Execution Logging

CronMaster includes an optional logging feature that captures detailed execution information for your cronjobs.

How It Works

When you enable logging for a cronjob, CronMaster automatically wraps your command with a log wrapper script. This wrapper:

  • Captures stdout and stderr output
  • Records the exit code of your command
  • Timestamps the start and end of execution
  • Calculates execution duration
  • Stores all this information in organized log files

Enabling Logs

  1. When creating or editing a cronjob, check the "Enable Logging" checkbox
  2. The wrapper is automatically added to your crontab entry
  3. Jobs run independently - they continue to work even if CronMaster is offline

Log Storage

Logs are stored in the ./data/logs/ directory with descriptive folder names:

  • If a job has a description/comment: {sanitized-description}_{jobId}/
  • If a job has no description: {jobId}/

Example structure:

./data/logs/
├── backup-database_root-0/
│   ├── 2025-11-10_14-30-00.log
│   ├── 2025-11-10_15-30-00.log
│   └── 2025-11-10_16-30-00.log
├── daily-cleanup_root-1/
│   └── 2025-11-10_14-35-00.log
├── root-2/  (no description provided)
│   └── 2025-11-10_14-40-00.log

Note: Folder names are sanitized to be filesystem-safe (lowercase, alphanumeric with hyphens, max 50 chars for the description part).

Log Format

Each log file includes:

--- [ JOB START ] ----------------------------------------------------
Command   : bash /app/scripts/backup.sh
Timestamp : 2025-11-10 14:30:00
Host      : hostname
User      : root
--- [ JOB OUTPUT ] ---------------------------------------------------

[command output here]

--- [ JOB SUMMARY ] --------------------------------------------------
Timestamp : 2025-11-10 14:30:45
Duration  : 45s
Exit Code : 0
Status    : SUCCESS
--- [ JOB END ] ------------------------------------------------------

Automatic Cleanup

Logs are automatically cleaned up to prevent disk space issues:

  • Maximum logs per job: 50 log files
  • Maximum age: 30 days
  • Cleanup trigger: When viewing logs or after manual execution
  • Method: Oldest logs are deleted first when limits are exceeded

Docker Considerations

  • Mount the ./data directory to persist logs on the host
  • The wrapper script location: ./data/cron-log-wrapper.sh. This will be generated automatically the first time you enable logging.

Non-Docker Considerations

  • Logs are stored at ./data/logs/ relative to the project directory
  • The codebase wrapper script location: ./app/_scripts/cron-log-wrapper.sh
  • The running wrapper script location: ./data/cron-log-wrapper.sh

Important Notes

  • Logging is optional and disabled by default
  • Jobs with logging enabled are marked with a blue "Logged" badge in the UI
  • Logs are captured for both scheduled runs and manual executions
  • Commands with file redirections (>, >>) may conflict with logging
  • The crontab stores the wrapped command, so jobs run independently of CronMaster