Używać PHP do tworzenia, edycji i usuwania zadań crontab?
Czy Można używać PHP do tworzenia, edycji i usuwania zadań crontab?
Wiem jak wypisać bieżące zadania crontab użytkownika Apache:
$output = shell_exec('crontab -l');
echo $output;
Ale jak dodać zadanie cron z PHP? 'crontab-e' po prostu otworzy Edytor tekstu i będziesz musiał ręcznie edytować wpisy przed zapisaniem pliku.
I jak usunąć zadanie crona za pomocą PHP? Ponownie musisz to zrobić ręcznie przez 'crontab-e'.
Z takim ciągiem zadań:
$job = '0 */2 * * * /usr/bin/php5 /home/user1/work.php';
Jak czy dodam go do listy zadań crontab za pomocą PHP?
12 answers
Użycie polecenia Crontab
usage: crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)
Więc,
$output = shell_exec('crontab -l');
file_put_contents('/tmp/crontab.txt', $output.'* * * * * NEW_CRON'.PHP_EOL);
echo exec('crontab /tmp/crontab.txt');
Powyższe może być używane zarówno do tworzenia i edycji / dołączania pod warunkiem, że użytkownik ma odpowiednie uprawnienia do zapisu pliku.
Aby usunąć zadania:
echo exec('crontab -r');
Zwróć również uwagę, że apache działa jako konkretny użytkownik i zwykle nie jest to root, co oznacza, że zadania cron mogą być zmieniane tylko dla użytkownika apache, chyba że użytkownik Apache otrzyma uprawnienia crontab -u
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-09 08:59:54
Niedawno przygotowaliśmy mini projekt (PHP > =5.3) do zarządzania plikami cron Dla zadań prywatnych i indywidualnych. To narzędzie łączy i zarządza plikami cron, dzięki czemu można ich używać, na przykład dla danego projektu. Dostępne testy jednostkowe: -)
Przykład z wiersza poleceń:
bin/cronman --enable /var/www/myproject/.cronfile --user www-data
Próbka z API:
use php\manager\crontab\CrontabManager;
$crontab = new CrontabManager();
$crontab->enableOrUpdate('/tmp/my/crontab.txt');
$crontab->save();
Zarządzanie poszczególnymi zadaniami z API:
use php\manager\crontab\CrontabManager;
$crontab = new CrontabManager();
$job = $crontab->newJob();
$job->on('* * * * *');
$job->onMinute('20-30')->doJob("echo foo");
$crontab->add($job);
$job->onMinute('35-40')->doJob("echo bar");
$crontab->add($job);
$crontab->save();
Github: PHP-crontab-manager
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-25 07:43:01
Sprawdź cronjob
function cronjob_exists($command){
$cronjob_exists=false;
exec('crontab -l', $crontab);
if(isset($crontab)&&is_array($crontab)){
$crontab = array_flip($crontab);
if(isset($crontab[$command])){
$cronjob_exists=true;
}
}
return $cronjob_exists;
}
Dołącz cronjob
function append_cronjob($command){
if(is_string($command)&&!empty($command)&&cronjob_exists($command)===FALSE){
//add job to crontab
exec('echo -e "`crontab -l`\n'.$command.'" | crontab -', $output);
}
return $output;
}
Usuń plik crontab
exec('crontab -r', $crontab);
Przykład
exec('crontab -r', $crontab);
append_cronjob('* * * * * curl -s http://localhost/cron/test1.php');
append_cronjob('* * * * * curl -s http://localhost/cron/test2.php');
append_cronjob('* * * * * curl -s http://localhost/cron/test3.php');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-14 20:45:04
This should do it
shell_exec("crontab -l | { cat; echo '*/1 * * * * command'; } |crontab -");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-08 04:33:23
Wypróbowałem rozwiązanie poniżej
class Crontab {
// In this class, array instead of string would be the standard input / output format.
// Legacy way to add a job:
// $output = shell_exec('(crontab -l; echo "'.$job.'") | crontab -');
static private function stringToArray($jobs = '') {
$array = explode("\r\n", trim($jobs)); // trim() gets rid of the last \r\n
foreach ($array as $key => $item) {
if ($item == '') {
unset($array[$key]);
}
}
return $array;
}
static private function arrayToString($jobs = array()) {
$string = implode("\r\n", $jobs);
return $string;
}
static public function getJobs() {
$output = shell_exec('crontab -l');
return self::stringToArray($output);
}
static public function saveJobs($jobs = array()) {
$output = shell_exec('echo "'.self::arrayToString($jobs).'" | crontab -');
return $output;
}
static public function doesJobExist($job = '') {
$jobs = self::getJobs();
if (in_array($job, $jobs)) {
return true;
} else {
return false;
}
}
static public function addJob($job = '') {
if (self::doesJobExist($job)) {
return false;
} else {
$jobs = self::getJobs();
$jobs[] = $job;
return self::saveJobs($jobs);
}
}
static public function removeJob($job = '') {
if (self::doesJobExist($job)) {
$jobs = self::getJobs();
unset($jobs[array_search($job, $jobs)]);
return self::saveJobs($jobs);
} else {
return false;
}
}
}
Napisy do: Klasa Crontab do dodawania, edycji i usuwania zadań Cron
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-03 10:47:07
Możesz spróbować nadpisać zmienną środowiskową EDITOR
czymś w rodzaju ed
, która może przyjmować sekwencję poleceń edycji nad standardowym wejściem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-12 09:41:29
Zależy gdzie przechowujesz swój crontab:
shell_exec('echo "'. $job .'" >> crontab');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-12 09:46:55
Możesz umieścić swój plik w /etc / cron.d / w formacie cron. Dodaj unikalny prefiks do nazwy pliku Aby wyświetlić listę zadań cron specyficznych dla skryptu, po prostu pracuj z listą plików z unikalnym prefiksem. Usuń plik, gdy chcesz wyłączyć zadanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-07 22:24:30
Nieźle...
Spróbuj tego, aby usunąć określone zadanie cron (Przetestowane).
<?php $output = shell_exec('crontab -l'); ?>
<?php $cron_file = "/tmp/crontab.txt"; ?>
<!-- Execute script when form is submitted -->
<?php if(isset($_POST['add_cron'])) { ?>
<!-- Add new cron job -->
<?php if(!empty($_POST['add_cron'])) { ?>
<?php file_put_contents($cron_file, $output.$_POST['add_cron'].PHP_EOL); ?>
<?php } ?>
<!-- Remove cron job -->
<?php if(!empty($_POST['remove_cron'])) { ?>
<?php $remove_cron = str_replace($_POST['remove_cron']."\n", "", $output); ?>
<?php file_put_contents($cron_file, $remove_cron.PHP_EOL); ?>
<?php } ?>
<!-- Remove all cron jobs -->
<?php if(isset($_POST['remove_all_cron'])) { ?>
<?php echo exec("crontab -r"); ?>
<?php } else { ?>
<?php echo exec("crontab $cron_file"); ?>
<?php } ?>
<!-- Reload page to get updated cron jobs -->
<?php $uri = $_SERVER['REQUEST_URI']; ?>
<?php header("Location: $uri"); ?>
<?php exit; ?>
<?php } ?>
<b>Current Cron Jobs:</b><br>
<?php echo nl2br($output); ?>
<h2>Add or Remove Cron Job</h2>
<form method="post" action="<?php $_SERVER['REQUEST_URI']; ?>">
<b>Add New Cron Job:</b><br>
<input type="text" name="add_cron" size="100" placeholder="e.g.: * * * * * /usr/local/bin/php -q /home/username/public_html/my_cron.php"><br>
<b>Remove Cron Job:</b><br>
<input type="text" name="remove_cron" size="100" placeholder="e.g.: * * * * * /usr/local/bin/php -q /home/username/public_html/my_cron.php"><br>
<input type="checkbox" name="remove_all_cron" value="1"> Remove all cron jobs?<br>
<input type="submit"><br>
</form>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-11 07:11:35
Najprostszym sposobem jest użycie polecenia shell_exec do wykonania skryptu bash, przekazującego wartości jako parametry. Stamtąd możesz manipulować crontabami, jak w każdym innym nieinteraktywnym skrypcie, a także upewnić się, że masz odpowiednie uprawnienia, używając sudo itp.
Zobacz to, Crontab bez crontab-e , Aby uzyskać więcej informacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:00:29
Zamiast crontab można również użyć Google app engine task queue . Ma hojny wolny kontyngent, jest szybki, skalowalny, modyfikowalny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-12 10:40:06
Its simple You can you curl to do tego, upewnij się, curl zainstalowany na serwerze:
Do wyzwalania co minutę : * * * * * curl --request POST ' https://glassdoor.com/admin/sendBdayNotification "
-
- *
Minuta godzina dzień Miesiąc Tydzień
Let say you want to send this notification 2: 15 PM everyday Możesz zmienić POST/GET na podstawie Twoje API:
15 14 * * * curl --request POST 'url of ur API'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-22 09:48:11