he hecho un poco de investigación y found in a forum, el siguiente mensaje:
llamada "crontab -e" con la variable de entorno EDITOR ajustado a un php guión. Esa secuencia de comandos puede modificar el archivo y cuando sale de crontab volverá a leer el archivo y la actualización.
Por lo tanto, he intentado algo, y funcionó.Voy a pegar el código de trabajo a continuación:
#!/usr/bin/php
<?php
$on = "* * * * * /usr/bin/php /home/user/every_minute_script.php\n";
$off = "# * * * * * /usr/bin/php /home/user/every_minute_script.php\n";
$param = isset($argv[1]) ? $argv[1] : '';
$filename = isset($argv[2]) ? $argv[2] : '';
if ($param == 'activate')
{
shell_exec('export EDITOR="/home/user/cron.php on"; crontab -e');
}
elseif($param == 'deactivate')
{
shell_exec('export EDITOR="/home/user/cron.php off"; crontab -e');
}
elseif(in_array($param, array('on', 'off')))
{
if (!is_writable($filename))
exit();
$crontab = file($filename);
$key = array_search($param == 'on' ? $off : $on, $crontab);
if ($key === false)
exit();
$crontab[$key] = $param == 'on' ? $on : $off;
sleep(1);
file_put_contents($filename, implode('', $crontab));
}
exit();
?>
Así las cosas, tenemos un único script llamado cron.php
encuentra en /home/user
carpeta, dispuesto a ser ejecutable (chmod a+x cron.php
) y llamado desde la línea de comandos (PHP-CLI) . Más tarde lo ajustaré para que se ejecute desde la web, que es mi intención.
Uso: ./cron.php activate
para habilitar el cronjob y ./cron.php deactivate
para deshabilitarlo.
La secuencia de comandos establece la variable de entorno EDITOR correctamente (a sí mismo) y llama al crontab -e
, que a su vez llama al EDITOR (que ahora es el mismo script cron.php) pasando la ubicación temporal del archivo crontab como argumento. Luego, se encuentra y cambia la línea de crontab adecuada, y se guarda la versión modificada, sustituyendo el archivo temporal. Cuando la secuencia de comandos se cierra, crontab se actualizará.
Esto hace exactamente lo que yo quería y se ajustaba a mis necesidades.
Las otras respuestas son agradables y pueden ajustarse a diferentes necesidades y escenarios, y quiero agradecer a todos los que contribuyeron.
Nota: no está comenzando/deteniendo el trabajo en sí (su modificación no afecta las tareas que ya se están ejecutando), solo está configurando si comenzará la próxima vez o no. – Piskvor
Sí. Tal vez hay una mejor manera de escribir esta pregunta. En lugar de iniciar/detener, ¿tal vez activar/desactivar? –
esto parece un duplicado de http://stackoverflow.com/questions/4421020/use-php-to-create-edit-and-delete-crontab-jobs – ben