Biblioteca PHP para administrar programas GNU/Linux Cron Jobs.
Te permite:
crontab COMANTY-LINE UTILITY (ya debe estar instalada en su distribución).sudo , si desea administrar crontab de otro usuario que el usuario de tiempo de ejecución sin encontrarnos con problemas correctos (ver más abajo) La biblioteca se puede instalar usando el compositor.
composer require tiben/crontab-manager ~1.0
La biblioteca está compuesta por tres clases:
CrontabJob es una clase de entidad que representa un trabajo cron.CrontabRepository se usa para persistir/recuperar sus trabajos cron.CrontabAdapter maneja la persistencia de los trabajos de Cron en el Crontab.Para trabajar, el crontabRepository necesita una instancia de crontabadapter.
$crontabRepository = new CrontabRepository(new CrontabAdapter());
Supongamos que desea crear un nuevo trabajo que consiste en lanzar el comando "df >> /tmp/df.log" todos los días a las 23:30. Puedes hacerlo de dos maneras.
De manera pura:
$crontabJob = new CrontabJob();
$crontabJob
->setMinutes(30)
->setHours(23)
->setDayOfMonth('*')
->setMonths('*')
->setDayOfWeek('*')
->setTaskCommandLine('df >> /tmp/df.log')
->setComments('Logging disk usage'); // Comments are persisted in the crontab
De la cadena de sintaxis cron de cron utilizando un método de fábrica:
$crontabJob = CrontabJob::createFromCrontabLine('30 23 * * * df >> /tmp/df.log');
Ahora puede agregar su nuevo Cronjob en el repositorio de Crontab y persistir todos los cambios en el Crontab.
$crontabRepository->addJob($crontabJob);
$crontabRepository->persist();
Supongamos que queremos modificar la hora de un Cronjob ya existente. Encontrar existencias de trabajos se realizan utilizando algunas expresiones regulares. El Regex se aplica a toda la línea Crontab.
$results = $crontabRepository->findJobByRegex('/Logging disk usage/');
$crontabJob = $results[0];
$crontabJob->setHours(21);
$crontabRepository->persist();
Puede eliminar un trabajo como este:
$results = $crontabRepository->findJobByRegex('/Logging disk usage/');
$crontabJob = $results[0];
$crontabRepository->removeJob($crontabJob);
$crontabRepository->persist();
Nota: Dado que los trabajos de Cron se combinan internamente por referencia, deben obtenerse previamente del repositorio o agregado previamente.
Esta característica le permite administrar el CRONTAB de otro usuario que el usuario que lanzó el tiempo de ejecución. Esto puede ser útil cuando el usuario de tiempo de ejecución es www-data pero el propietario del CRONTAB que desea editar es su propia cuenta de usuario de Linux.
Para hacer esto, simplemente pase el nombre de usuario del propietario de Crontab como parámetro del constructor de crontabadapter. Supongamos que son www-data y desea editar el crontab del usuario bobby :
$crontabAdapter = new CrontabAdapter('bobby');
$crontabRepository = new CrontabRepository($crontabAdapter);
Usando de esta manera, se encontrará con problemas de derechos de usuario. Esto se puede manejar editando su archivo sudoers usando 'Visudo'.
Si desea permitir que el usuario www-data edite el crontab del usuario bobby , agregue esta línea:
www-data ALL=(bobby) NOPASSWD: /usr/bin/crontab
Lo que le dice a sudo que no solicite contraseña cuando el usuario www-data llama crontab como usuario bobby usando sudo
Ahora, puede acceder a la crontab del usuario bobby así:
$crontabAdapter = new CrontabAdapter('bobby', true);
$crontabRepository = new CrontabRepository($crontabAdapter);
Tenga en cuenta el segundo parámetro true de la llamada del constructor Crontabadapter. Este booleano le dice al Crontabadapter que use sudo internamente al llamar crontab .
Puede habilitar o deshabilitar sus trabajos cron utilizando el método setEnabled() de un objeto cronjob en consecuencia:
$crontabJob->setEnabled(false);
Esto preparará su trabajo cron con un # en su crontab cuando lo persista.
Además, si no puede leer los crontabs de otro usuario o si está en una arquitectura distribuida donde los crons no se ejecutan en la máquina que ejecuta los trabajos, puede crear cualquier otro adaptador para su arquitectura implementando el CrontabAdapterInterface .
Luego puede instanciar el CrontabRepository con su adaptador.
Las pruebas se han escrito usando PhPunit y requieren la versión 5.3+. Para ejecutar pruebas:
$ phpunit <crontab-library-path>/tests
Si instaló la biblioteca usando el compositor y las dependencias de desarrollo instaladas, puede ejecutarlas utilizando PhPunit incluida como dependencia:
$ ./vendor/bin/phpunit <crontab-library-path>/tests
... son bienvenidos :)