Index

Cron

MMO\core · 1 symbol · generated 30 Sep 2026

class

Cron

Cron.php:20

Manage the current user's real system crontab (via the crontab command). addJob/removeJob/

class MMO\core\Cron extends MMO\core\classes\aModule
Namespace
MMO\core
Extends
aModule
See
save all mutate the REAL crontab immediately.
$cron = Cron::Shared(); $cron->getJobs(); // e.g. ['@localhost' => [[CronExp, 'some command']]]

Index

LOCAL_EMAIL
jobs
mailto
tmpFile
addJob($interval, $command, $email)Add a job to the cron table.
getJobs()Get the list of cron jobs for the current user
getLocalEmail()Get local email where cron send its email if MAILTO is not defined In general these email ares stored in /var/mail/{username} and you can access theme by reading the file or call mail
getTempFilename()
hasJob($command, $index)Find a job from its command
reload()Re-read the real crontab (writeCronJobs) into $jobs/$mailto, discarding any unsaved in-memory changes (e.g.
removeAll()Remove the current user's ENTIRE crontab (crontab -r) -- irreversible, and NOT limited to jobs added via this class.
removeJob($command, $save)Remove the first job with the given command from the cron tab
save()Write the current in-memory $jobs (getJobs) back to the real crontab (writeJobs).
writeCronJobs()Write crontab -l in a temporary file
writeJobs($jobs)Write the list of jobs returned by getJobs()
__wakeup()Allocates a fresh temp file ($tmpFile) and loads the current real crontab into memory (reload).

Constants1

LOCAL_EMAIL

const LOCAL_EMAIL = '@localhost'
See
$mailto's default: cron mails go to the local system user when no explicit MAILTO is set.

Properties3

jobs

protected array $jobs = []
Type
array

mailto

protected string $mailto
Type
string

tmpFile

protected string $tmpFile
Type
string

Methods12

addJob($interval, $command, $email)

Cron.php:127

Add a job to the cron table.

function addJob( MMO\core\helpers\CronExp|string $interval, string $command, ?string $email = null ): string!NOTE: if you want to suppress the output of a command, use `{command} >/dev/null 2>&1`
$intervalCronExp | stringthe interval to trigger the job for
$commandstringthe command to execute
$email = nullnull | string- if null, will use current mailto variable - if string, will add mailto instruction
returnsstringthe real job command written in the cron tab

getJobs()

Cron.php:93

Get the list of cron jobs for the current user

function getJobs(): array
returnsarraylist<array{CronExp, string}>> the jobs by MAILTO: each [interval, command]

getLocalEmail()

Cron.php:50

Get local email where cron send its email if MAILTO is not defined In general these email ares stored in /var/mail/{username} and you can access theme by reading the file or call mail

function getLocalEmail(): string
returnsstring

getTempFilename()

Cron.php:40
function getTempFilename(): string
returnsstringthe temp file used to stage crontab reads/writes ($tmpFile).

hasJob($command, $index)

Cron.php:103

Find a job from its command

function hasJob(string $command, ?array &$index = null): bool
$commandstring
$index = nullnull | array[email, index] the index in $this->jobs
returnsbool

removeAll()

Cron.php:64

Remove the current user's ENTIRE crontab (crontab -r) -- irreversible, and NOT limited to jobs added via this class.

function removeAll(): void
returnsvoid

removeJob($command, $save)

Cron.php:154

Remove the first job with the given command from the cron tab

function removeJob(string $command, bool $save = true): bool
$commandstringthe command written in the cron tab (returned by addJob)
$save = truebool
returnsbool

writeCronJobs()

Cron.php:58

Write crontab -l in a temporary file

function writeCronJobs(): void
returnsvoid

writeJobs($jobs)

Cron.php:168

Write the list of jobs returned by getJobs()

function writeJobs(array $jobs): void
$jobsarray[MAILTO => [[{CronExp} interval, {string} command]]]
returnsvoid

__wakeup()

Cron.php:34

Allocates a fresh temp file ($tmpFile) and loads the current real crontab into memory (reload).

function __wakeup(): void
returnsvoid
Inherited members (48)
ConstantsDeclared byDescription
ALERTiLogLevelAlert: Action must be taken immediately.
ALLiLogLevelMask for all
ALL_PLUSiLogLeveldebug everything
BACKTRACEiLogLevel
CRITICALiLogLevelCritical: Critical conditions.
DEBUGiLogLevelDebug: Detailed debug information.
DEEPiLogLeveldebug everything with arguments
EMERGENCYiLogLevelEmergency: System is unusable.
ERRORiLogLevelError: Runtime errors that do not require immediate action but should typically be logged and monitored.
ERROR_PLUSiLogLevelMask for all error
FATALiLogLevelMask for all fatal error
INFOiLogLevelInfo: Interesting events.
INFO_PLUSiLogLevelMask for all errors/warning/notices/info
MEMORYiLogLevelinclude backtrace object
NOTICEiLogLevelNotice: Normal but significant events.
NOTICE_PLUSiLogLevelMask for all errors/warning/notices/info
TRACEiLogLevelinclude backtrace as origins
WARNINGiLogLevelWarning: Exceptional occurrences that are not errors.
WARNING_PLUSiLogLevelMask for all errors and warnings
PropertiesDeclared byDescription
verbosityaModule
MethodsDeclared byDescription
alert($message, $context)aModuleAction must be taken immediately.
backtraces($message, $context)aModuleForce-log a message at INFO level together with a full stack trace/memory snapshot (iLogLevel::BACKTRACE), bypassing the verbosity mask entirely (any non-zero verbosity is enough to trigger it).
Configure($config)aModuleMerge $config into this module's configuration in the shared Configuration.
critical($message, $context)aModuleCritical conditions. No-op if CRITICAL is currently filtered out by the verbosity mask.
debug($message, $context)aModuleDetailed debug information.
debugName()aModuleHuman-readable identifier used as the default {origin} in this instance's log messages.
DefaultConfig()aModuleThe config a module starts from before anything loaded via Configuration is merged in.
emergency($message, $context)aModuleSystem is unusable. No-op if EMERGENCY is currently filtered out by the verbosity mask.
error($message, $context)aModuleRuntime errors that do not require immediate action but should typically be logged and monitored.
getVerbosity()aModule
info($message, $context)aModuleInteresting events. No-op if INFO is currently filtered out by the verbosity mask.
Instantiate($config)aModule(Re)create the shared instance immediately, configured with $config merged into the class's existing config.
IsShared()aModule
log($level, $message, $context)aModuleLogs with an arbitrary level.
notice($message, $context)aModuleNormal but significant events.
offsetExists($key)aModule\ArrayAccess::offsetExists -- tells whether $key is a declared property at all, regardless of whether it is currently readable/writable through array access.
offsetGet($key)aModule\ArrayAccess::offsetGet -- reads a property directly, unless it has a #[Serialize(serialize: 'methodName')] attribute, in which case that zero-argument method is called instead (e.g.
offsetSet($key, $value)aModule\ArrayAccess::offsetSet -- sets a property directly, unless it has a #[Serialize(unserialize: 'methodName')] attribute, in which case that method is called with $value instead (e.g.
offsetUnset($key)aModule\ArrayAccess::offsetUnset -- equivalent to $module[$key] = null.
serialize($path, $serializer)aModule\MMO\core\interfaces\iSerializable::serialize -- exports every property (via
setVerbosity($verb)aModuleSet the current verbosity mask, replacing whatever it was before.
Shared()aModuleGet the shared instance, creating (and configuring) it on first call.
testVerbosity($level)aModuleTest whether a given level (or set of levels) is currently enabled by this instance's verbosity mask.
traitUnshare($serialize)aModuleRemove the shared instance, so the next Shared() call creates a fresh one.
unserialize($data, $path, $instances)aModule\MMO\core\interfaces\iSerializable::unserialize -- merges $data onto DefaultConfig, runs it through the (possibly overridden) constructor, then applies each resulting value to its property (via
Unshare($serialize)aModuleLike tSingleton::Unshare, but also disconnects this module's instance from every event it was listening to (via Event::DisconnectListeners) before dropping it.
warning($message, $context)aModuleExceptional occurrences that are not errors.
__construct($config)aModuleprotected constructor, so it is not possible to do new Module(...) called by the serialization process just before being injected with data.