crontab 작업을 생성, 편집 및 삭제하기 위해 PHP를 사용합니까?
crontab 작업을 작성, 편집 및 삭제하기 위해 PHP를 사용할 수 있습니까?
Apache 사용자의 현재 crontab 작업을 사용하는 방법을 알고 있습니다.
$output = shell_exec('crontab -l');
echo $output;
그러나 PHP로 cron 작업을 추가하는 방법은 무엇입니까? 'crontab -e'는 텍스트 편집기를 열기 전에 파일을 저장하기 전에 항목을 수동으로 편집해야합니다.
PHP로 cron 작업을 삭제하는 방법은 무엇입니까? 다시 'crontab -e'로 수동으로 수행해야합니다.
다음과 같은 작업을 사용하십시오.
$job = '0 */2 * * * /usr/bin/php5 /home/user1/work.php';
PHP로 crontab 작업 목록에 어떻게 추가 할 수 있습니까?
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)
그래서,
$output = shell_exec('crontab -l');
file_put_contents('/tmp/crontab.txt', $output.'* * * * * NEW_CRON'.PHP_EOL);
echo exec('crontab /tmp/crontab.txt');
위의 내용은 사용자에게 적절한 파일 쓰기 권한이있는 경우 작성 및 편집 / 추가 할 수 있습니다 .
작업을 삭제하려는 경우
echo exec('crontab -r');
또한 아파치가 특정 사용자로 실행되고 일반적으로 루트가 아니라고 아파치 사용자에게 crontab -u
권한이 부여되지 않은 아파치 사용자에 존재하는 cron 작업을 설명 수 있습니다 .
우리는 최근 개인 및 인화 작업을위한 준비 크론 파일을 관리하기위한 미니 프로젝트 (PHP> = 5.3)를 준비했습니다. 이 도구는 cron 파일을 연결하고 관리하는 예를 들어 프로젝트별로 사용할 수 있습니다. 사용 가능한 단위 테스트 :-)
명령 행 샘플 :
bin/cronman --enable /var/www/myproject/.cronfile --user www-data
API 샘플 :
use php\manager\crontab\CrontabManager;
$crontab = new CrontabManager();
$crontab->enableOrUpdate('/tmp/my/crontab.txt');
$crontab->save();
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- 크론 탭 관리자
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;
}
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;
}
크론 탭 제거
exec('crontab -r', $crontab);
예
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');
이거해야 해
shell_exec("crontab -l | { cat; echo '*/1 * * * * command'; } |crontab -");
아래 시도를 시도했습니다
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;
}
}
}
학점 : Cron 작업 추가, 편집 및 제거를위한 Crontab 클래스
표준 입력을 통해 일련의 편집 명령을 사용할 수 EDITOR
있는 것과 같은 ed
것으로 환경 변수를 재정의 할 수 있습니다.
crontab을 저장하는 위치에 따라 다릅니다.
shell_exec('echo "'. $job .'" >> crontab');
파일을 cron 형식으로 /etc/cron.d/에 넣을 수 있습니다. filenaname에 몇 가지 고유 한 접두사 추가 스크립트 별 cron 작업을 나열하려면 고유 한 접두사가있는 파일 목록으로 작업하면됩니다. 작업을 비활성화하려면 파일을 삭제하십시오.
니스 ...
특정 크론 작업을 제거하려면이 작업을 시도하십시오 (테스트 됨).
<?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>
가장 쉬운 방법은 shell_exec 명령을 사용하여 bash 스크립트를 실행하고 값을 매개 변수로 전달하는 것입니다. 거기에서 다른 비대화 형 스크립트 에서처럼 crontab을 조작 할 수 있으며 sudo 등을 사용하여 올바른 권한이 있는지 확인할 수도 있습니다.
자세한 내용은 crontab -e없는 Crontab을 참조하십시오 .
그것의 간단합니다 당신은 그렇게 할 수 있습니다, curl이 서버에 설치되어 있는지 확인하십시오 :
매분 트리거 : * * * * * curl --request POST ' https://glassdoor.com/admin/sendBdayNotification '
-
-
-
- *
-
분 시간 일 월 주
-
이 알림을 매일 오후 2시 15 분에 보내고 싶다고 가정 해 보겠습니다 . API에 따라 POST / GET을 변경할 수 있습니다.
15 14 * * * curl --request POST 'url of ur API'
crontab 대신 Google의 앱 엔진 작업 대기열을 사용할 수도 있습니다 . 넉넉한 무료 할당량이 있으며 빠르고 확장 가능하며 수정할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/4421020/use-php-to-create-edit-and-delete-crontab-jobs
'IT' 카테고리의 다른 글
Android- 가로 모드의 에뮬레이터, 화면이 회전하지 (0) | 2020.07.24 |
---|---|
카트리지 쓰기 또는 무시 (0) | 2020.07.24 |
XSL에서 'call-template'과 'apply-templates'의 차이점은 무엇입니까? (0) | 2020.07.24 |
Google Espresso 또는 Robotium (0) | 2020.07.24 |
Rust 프로그램이화물에서 메타 데이터에 어떻게 접근 할 수 있습니까? (0) | 2020.07.24 |