je fait quelques recherches et found in a forum, le message suivant:
Appel "crontab -e" avec la variable d'environnement EDITOR réglé sur un php script. Ce script peut modifier le fichier et quand il sortira crontab relire le fichier et mettre à jour.
Donc, j'ai essayé quelque chose, et cela a fonctionné.Je vais coller le code de travail ci-dessous:
#!/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();
?>
Comme il est, nous avons un seul script nommé cron.php
situé au dossier /home/user
, qui doit être exécutable (chmod a+x cron.php
) et appelé à partir de la ligne de commande (PHP-CLI) . Plus tard, je vais le modifier pour fonctionner à partir du Web, ce qui est mon intention. Utilisation: ./cron.php activate
pour activer le cronjob et ./cron.php deactivate
pour le désactiver. Le script définit correctement la variable d'environnement EDITOR (sur elle-même) puis appelle crontab -e
, qui à son tour appelle l'EDITOR (qui est maintenant le même script cron.php) en passant l'emplacement du fichier crontab temporaire en tant qu'argument. Ensuite, la ligne de crontab appropriée est trouvée et modifiée, et la version modifiée est enregistrée, en substituant le fichier temporaire. Lorsque le script se termine, crontab va se mettre à jour.
Cela fait exactement ce que je voulais, et correspond à mes besoins.
Les autres réponses sont belles et peuvent correspondre à différents besoins et scénarios, et je tiens à remercier tous ceux qui ont contribué.
Remarque: vous ne démarrez pas/n'arrêtez pas le travail proprement dit (votre modification n'affecte pas les travaux déjà en cours d'exécution), vous définissez simplement s'il doit démarrer la prochaine fois ou non. – Piskvor
Oui. Peut-être qu'il y a une meilleure façon d'écrire cette question. Au lieu de démarrer/arrêter, peut-être activer/désactiver? –
cela ressemble à un doublon de http://stackoverflow.com/questions/4421020/use-php-to-create-edit-and-delete-crontab-jobs – ben