innmind / cron
Helper to install crontabs on a machine
4.0.0
2025-08-07 14:18 UTC
Requires
- php: ~8.2
- innmind/foundation: ~1.5
Requires (Dev)
- innmind/black-box: ~6.5
- innmind/coding-standard: ~2.0
- innmind/static-analysis: ^1.2.1
Suggests
- innmind/operating-system: To easily access to a machine control mechanism
This package is auto-updated.
Last update: 2025-08-07 14:19:01 UTC
README
Library to help manage crontabs of a machine
Important
To correctly use this library you must validate your code with vimeo/psalm
Installation
composer require innmind/cron
Usage
Insalling jobs
For the default user :
use Innmind\Cron\{ Crontab, Job, }; use Innmind\OperatingSystem\Factory; $os = Factory::build(); $install = Crontab::forConnectedUser( Job::of('* * * * * say hello'), Job::of('*/2 * * * * say world'), ); $install($os->control())->unwrap(); // this is the same as running "echo '* * * * * say hello' | crontab" in your terminal
For a specific user :
use Innmind\Cron\{ Crontab, Job, }; use Innmind\OperatingSystem\Factory; use Innmind\Immutable\{ Attempt, SideEffect, }; $os = Factory::build(); $install = Crontab::forUser( 'watev', Job::of('* * * * * say hello'), ); $install($os->control()); // Attempt<SideEffect> // this is the same as running "echo '* * * * * say hello' | crontab -u admin" in your terminal
Since this library rely on innmind/server-control
you can easily install a crontab on a remote server. For example installing a crontab for the user admin
on the server example.com
would be done like this :
use Innmind\Cron\{ Crontab, Job, }; use Innmind\OperatingSystem\Factory; use Innmind\Url\Url; $os = Factory::build(); $install = Crontab::forUser( 'admin', Job::of('* * * * * say hello'), ); $install( $os->remote()->ssh(Url::of('ssh://example.com')), )->unwrap();
Note
At the moment the library does not support adding comments and spaces in the crontab.
Reading a crontab
For the default user :
use Innmind\Cron\{ Read, Job, }; use Innmind\OperatingSystem\Factory; use Innmind\Immutable\{ Attempt, Sequence, }; $os = Factory::build(); $read = Read::forConnectedUser(); $jobs = $read($os->control()); // it will run "crontab -l" // $jobs is an instance of Attempt<Sequence<Job>>
For a specific user :
use Innmind\Cron\{ Read, Job, }; use Innmind\OperatingSystem\Factory; use Innmind\Immutable\{ Attempt, Sequence, }; $os = Factory::build(); $read = Read::forUser('watev'); $jobs = $read($os->control()); // it will run "crontab -u watev -l" // $jobs is an instance of Attempt<Sequence<Job>>
Note
At the moment comments and spaces are not listed in the $jobs
variable.