Skip to main content

Overview

The JobManager orchestrates cron job registration and execution with automatic logging to PocketBase. It provides structured execution logging, manual job triggers, and comprehensive job analytics.

Type Definition

The JobManager wraps PocketBase’s built-in cron system with automatic execution logging and metadata tracking. All logs are stored in the _job_logs collection.

Initialization

Initialize

Creates and initializes the job manager, setting it as the global singleton.
core.App
required
PocketBase application instance
Returns:
  • *Manager - Initialized manager instance
  • error - Error if logger initialization fails
Location: core/jobs/manager.go:32 Process:
  1. Initializes the job logger
  2. Creates the _job_logs collection
  3. Sets up background flush workers
  4. Marks orphaned jobs (from crashes) as timeout
  5. Sets the global singleton
Example:

GetManager

Returns the global JobManager singleton. Location: core/jobs/manager.go:456 Example:

Job Registration

RegisterJob

Registers a new cron job with automatic logging.
string
required
Unique job identifier
string
Human-readable job name (uses jobID if empty)
string
Job description for documentation
string
required
Cron expression (e.g., "0 0 * * *" for daily at midnight)
func(*ExecutionLogger)
required
Job execution function with structured logging
Returns:
  • error - Error if registration or cron scheduling fails
Location: core/jobs/manager.go:46 Example:

RegisterInternalSystemJobs

Registers built-in pb-ext maintenance jobs:
  • __pbExtLogClean__ - Cleans job logs older than 72 hours (daily at midnight)
  • __pbExtAnalyticsClean__ - Deletes analytics older than 90 days (daily at 3 AM)
Location: core/jobs/manager.go:286

Job Execution

ExecuteJobManually

Runs a registered job immediately, outside its schedule.
string
required
Job identifier
string
User or system that triggered execution (for audit trail)
Returns:
Location: core/jobs/manager.go:86 Example:

Job Information

GetJobs

Returns a filtered list of registered jobs.
ListOptions
required
Filter options for job listing
Location: core/jobs/manager.go:174 Example:

GetJobMetadata

Returns metadata for a specific job by ID. Location: core/jobs/manager.go:210

GetSystemStatus

Returns status summary of the cron scheduler. Returns:
Location: core/jobs/manager.go:245

Job Management

RemoveJob

Removes a job from the cron scheduler and registry. Location: core/jobs/manager.go:235 Example:

UpdateTimezone

Updates the cron scheduler timezone.
string
required
IANA timezone name (e.g., “America/New_York”)
Location: core/jobs/manager.go:275 Example:

Logger

Returns the underlying job Logger (needed for HTTP handlers). Location: core/jobs/manager.go:394

Complete Examples

Basic Job Registration

Job with Error Handling

Progress Tracking

Manual Execution via API

Conditional Job Registration

System Jobs

These job IDs are treated as system jobs:
  • __pbLogsCleanup__ - PocketBase log cleanup
  • __pbOTPCleanup__ - PocketBase OTP cleanup
  • __pbMFACleanup__ - PocketBase MFA cleanup
  • __pbDBOptimize__ - PocketBase database optimization
  • __pbRateLimitersCleanup__ - PocketBase rate limiter cleanup
  • __pbExtLogClean__ - pb-ext job log cleanup
  • __pbExtAnalyticsClean__ - pb-ext analytics cleanup
Location: core/jobs/types.go:22

Best Practices

  1. Job IDs: Use descriptive, unique IDs (e.g., "daily_cleanup", not "job1")
  2. Structured Logging: Always use ExecutionLogger methods, not direct fmt.Println
  3. Error Handling: Always call log.Fail(err) on errors
  4. Statistics: Use log.Statistics() for metrics (processed count, duration, etc.)
  5. Progress Updates: Call log.Progress() for long-running jobs
  6. Timezone Awareness: Set timezone early in app lifecycle
  7. Manual Triggers: Require authentication for manual execution endpoints