banner-shape-1
banner-shape-1
object-3d-1
object-3d-2
Automate Business Workflows Step-by-Step in CodeIgniter 4

CodeIgniter 4 + Cron Jobs: How I Automated a Complete Business Workflow

CodeIgniter 4 Cron Jobs are one of the most powerful ways to automate recurring tasks inside a web application. Whether you need to send reminders, update records, sync data, or process workflows, cron jobs allow your system to run tasks automatically, without human effort.

In this guide, I’ll explain how I built a fully automated business workflow using CodeIgniter 4 + Cron Jobs, including real examples, folder structure, and best practices you can apply to any project.

What Are Cron Jobs?

A cron job is a scheduled task that runs automatically on your server at fixed intervals (every minute, hourly, daily, weekly, etc.).

Example uses:

  • Auto-send emails/SMS
  • Sync inventory with ERP
  • Auto-generate invoices
  • Expire memberships
  • Send reminders
  • Clean old logs
  • Update order statuses

When combined with CodeIgniter 4, cron jobs can run complete business workflows on autopilot.

Why Use Cron Jobs in CodeIgniter 4?

CodeIgniter 4 is lightweight, fast, and perfect for background task automation.

Benefits:

  • No need for manual triggers
  • Zero reliance on user actions
  • Runs 24/7
  • Reduces human error
  • Perfect for API integrations
  • Helps scale business operations

How I Designed the Business Automation Workflow

Before writing code, I created a simple workflow:

  1. Fetch pending tasks from the database
  2. Process each task
  3. Call external APIs (like ERP, SMS, or email)
  4. Update the database
  5. Log results for debugging
  6. Notify admin on failures

This entire workflow runs automatically every 5 minutes.

Step 1: Create a Custom Command in CodeIgniter 4

CodeIgniter 4 provides a great CLI tool called spark, which allows you to create custom commands.

Run:

php spark make:command ProcessTasks

This creates:

app/Commands/ProcessTasks.php

Inside the file:

<?php

namespace App\Commands;

use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;

class ProcessTasks extends BaseCommand
{
    protected $group = 'Custom Tasks';
    protected $name = 'tasks:process';
    protected $description = 'Process pending business workflow tasks';

    public function run(array $params)
    {
        CLI::write('Cron started...', 'yellow');

        $model = model('TaskModel');
        $pending = $model->getPending();

        foreach ($pending as $task) {
            try {
                // Your workflow logic
                $this->processTask($task);

                $model->markCompleted($task['id']);
                CLI::write("Task #{$task['id']} completed", 'green');

            } catch (\Exception $e) {
                $model->markFailed($task['id'], $e->getMessage());
                CLI::write("Task #{$task['id']} failed: {$e->getMessage()}", 'red');
            }
        }

        CLI::write('Cron finished.', 'yellow');
    }

    private function processTask($task)
    {
        // Example API workflow
        // (send email, hit ERP API, generate file, update data etc.)
    }
}

Step 2: Create Your Task Model

class TaskModel extends Model
{
    protected $table = 'tasks';

    public function getPending()
    {
        return $this->where('status', 'pending')->findAll();
    }

    public function markCompleted($id)
    {
        return $this->update($id, ['status' => 'completed']);
    }

    public function markFailed($id, $reason)
    {
        return $this->update($id, [
            'status' => 'failed',
            'error_message' => $reason
        ]);
    }
}

Step 3: Create the Cron Job in Your Server

Run your command every 5 minutes:

Linux Cron

Run:

crontab -e

Add:

*/5 * * * * php /home/username/public_html/spark tasks:process >> /home/username/logs/cron.log 2>&1

This will:

  • Run your CI4 command
  • Every 5 minutes
  • Log output for debugging

Step 4: Add Logging for Debugging

log_message('info', 'Processing task ID: ' . $task['id']);

Logs go to: writable/logs/

Real Example: Automating a Business Workflow

Here’s a real use case I implemented for a client:

Workflow:

  • Customer submits a return request
  • Cron checks pending requests
  • It creates a 50% credit note in ERP (via API)
  • Sends email to customer
  • Updates DB
  • Logs everything
  • Marks request completed

Why automation was required?
The manual process used to take 2–3 hours daily. Now the cron job does everything in seconds.

  • Zero human effort
  • Zero delays
  • Zero mistakes

Best Practices for Cron Jobs in CodeIgniter 4

  • Use custom Commands (never trigger URLs)
  • Add rate limiting on external APIs
  • Add retry logic for failed requests
  • Log everything
  • Never run heavy queries inside loops
  • Use queues if processing large tasks
  • Use try/catch to avoid broken cron
  • Set timeouts for APIs

Conclusion

Automating workflows using CodeIgniter 4 Cron Jobs can save time, reduce errors, and help businesses scale effortlessly. Whether you’re processing orders, syncing data, or running API integrations, cron jobs turn your system into a powerful automated engine.

If you’re building a CI4 application, cron jobs are not optional, they are essential.

Let’s Connect Beyond the Blog