MageSmith
Security · group Default · Magento 2.4.9

security_deactivate_expired_users

security_deactivate_expired_users is a Magento 2 cron job declared by the Security module in the Default group. It runs hourly (0 * * * *) and dispatches Magento\Security\Model\UserExpirationManager::deactivateExpiredUsers() on every tick.

Wiring

Group
Default (default)
Module
Security (magento/module-security)
Schedule
0 * * * *
Frequency
hourly
Handler
Magento\Security\Model\UserExpirationManager::deactivateExpiredUsers()
Source file
vendor/magento/module-security/etc/crontab.xml

Run the security_deactivate_expired_users cron job manually

Magento doesn't have a per-job CLI invocation — the smallest unit is a group. The command below runs every job in the default group whose schedule is due. The --bootstrap flag bypasses the lock-file check so the job runs even when the system cron is configured.

php bin/magento cron:run --group=default --bootstrap=standaloneProcessStarted=1

Define your own job like this one

Want a job that fires on the same cadence in your own module? Drop these two files in — adjust the vendor/module namespace, the job name, and the body of deactivateExpiredUsers.

1. etc/crontab.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
    <group id="default">
        <job name="vendor_module_security_deactivate_expired_users_clone"
             instance="Vendor\Module\Cron\SecurityDeactivateExpiredUsers"
             method="deactivateExpiredUsers">
            <schedule>0 * * * *</schedule>
        </job>
    </group>
</config>

2. Cron handler class

<?php
declare(strict_types=1);

namespace Vendor\Module\Cron;

use Psr\Log\LoggerInterface;

class SecurityDeactivateExpiredUsers
{
    public function __construct(
        private readonly LoggerInterface $logger,
    ) {
    }

    public function deactivateExpiredUsers(): void
    {
        $this->logger->info('security_deactivate_expired_users cron tick');

        // Your scheduled work here. Keep this short — long jobs
        // should enqueue work onto the message queue rather than
        // running inline in the cron tick.
    }
}

Need a full module scaffolded around this cron job? Module Generator wires the crontab.xml, handler class, and module registration for you.

Cron handlers often dispatch Magento 2 events on each tick — observers bound to those events run as part of the scheduled work. The CLI Reference covers cron:run, cron:install, and the rest of the cron:* namespace.

Every Magento dev tool, in one hosted workspace.

Free to sign up. Nothing to install. Drafts, audits, and projects saved across every tool.