php教程 php手册 php5.3下使用php管理crontab计划任务

php5.3下使用php管理crontab计划任务

May 25, 2016 pm 04:40 PM

php5.3或以上版本可以使用php管理crontab计划任务,下面我先来体验一下,有需要学习了解的朋友可进入参考.

1.使用php-crontab-manager管理计划任务

要求 PHP>=5.3,使用方法举例,代码如下:

1

2

3

4

use phpmanagercrontabCrontabManager;

$crontab = new CrontabManager();

$crontab->enableOrUpdate('/tmp/my/crontab.txt');

$crontab->save();

로그인 후 복사

添加一个简单的计划任务,代码如下:

1

2

3

4

5

6

7

8

9

use phpmanagercrontabCrontabManager;

$crontab = new Ssh2_crontab_manager();

$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();

로그인 후 복사

php类文件,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

<?php

Class Ssh2_crontab_manager {

    private $connection;

    private $path;

    private $handle;

    private $cron_file;

    function __construct($host = NULL, $port = NULL, $username = NULL, $password = NULL) {

        $path_length = strrpos(__FILE__, "/");

        $this->path = substr(__FILE__, 0, $path_length) . &#39;/&#39;;

        $this->handle = &#39;crontab.txt&#39;;

        $this->cron_file = "{$this->path}{$this->handle}";

        try {

            if (is_null($host) || is_null($port) || is_null($username) || is_null($password)) throw new Exception("The host, port, username and password arguments must be specified!");

            $this->connection = @ssh2_connect($host, $port);

            if (!$this->connection) throw new Exception("The SSH2 connection could not be established.");

            $authentication = @ssh2_auth_password($this->connection, $username, $password);

            if (!$authentication) throw new Exception("Could not authenticate &#39;{$username}&#39; using pasword: &#39;{$password}&#39;.");

        }

        catch(Exception $e) {

            $this->error_message($e->getMessage());

        }

    }

    public function exec() {

        $argument_count = func_num_args();

        try {

            if (!$argument_count) throw new Exception("There is nothing to exececute, no arguments specified.");

            $arguments = func_get_args();

            $command_string = ($argument_count > 1) ? implode(" && ", $arguments) : $arguments[0];

            $stream = @ssh2_exec($this->connection, $command_string);

            if (!$stream) throw new Exception("Unable to execute the specified commands: <br />{$command_string}");

        }

        catch(Exception $e) {

            $this->error_message($e->getMessage());

        }

        return $this;

    }

    public function write_to_file($path = NULL, $handle = NULL) {

        if (!$this->crontab_file_exists()) {

            $this->handle = (is_null($handle)) ? $this->handle : $handle;

            $this->path = (is_null($path)) ? $this->path : $path;

            $this->cron_file = "{$this->path}{$this->handle}";

            $init_cron = "crontab -l > {$this->cron_file} && [ -f {$this->cron_file} ] || > {$this->cron_file}";

            $this->exec($init_cron);

        }

        return $this;

    }

    public function remove_file() {

        if ($this->crontab_file_exists()) $this->exec("rm {$this->cron_file}");

        return $this;

    }

    public function append_cronjob($cron_jobs = NULL) {

        if (is_null($cron_jobs)) $this->error_message("Nothing to append!  Please specify a cron job or an array of cron jobs.");

        $append_cronfile = "echo &#39;";

        $append_cronfile.= (is_array($cron_jobs)) ? implode("n", $cron_jobs) : $cron_jobs;

        $append_cronfile.= "&#39;  >> {$this->cron_file}";

        $install_cron = "crontab {$this->cron_file}";

        $this->write_to_file()->exec($append_cronfile, $install_cron)->remove_file();

        return $this;

    }

    public function remove_cronjob($cron_jobs = NULL) {

        if (is_null($cron_jobs)) $this->error_message("Nothing to remove!  Please specify a cron job or an array of cron jobs.");

        $this->write_to_file();

        $cron_array = file($this->cron_file, FILE_IGNORE_NEW_LINES);

        if (emptyempty($cron_array)) {

            $this->remove_file()->error_message("Nothing to remove!  The cronTab is already empty.");

        }

        $original_count = count($cron_array);

        if (is_array($cron_jobs)) {

            foreach ($cron_jobs as $cron_regex) $cron_array = preg_grep($cron_regex, $cron_array, PREG_GREP_INVERT);

        } else {

            $cron_array = preg_grep($cron_jobs, $cron_array, PREG_GREP_INVERT);

        }

        return ($original_count === count($cron_array)) ? $this->remove_file() : $this->remove_crontab()->append_cronjob($cron_array);

    }

    public function remove_crontab() {

        $this->remove_file()->exec("crontab -r");

        return $this;

    }

    private function crontab_file_exists() { //开源代码phprm.com

        return file_exists($this->cron_file);

    }

    private function error_message($error) {

        die("<pre style=&#39;color:#EE2711&#39;>ERROR: {$error}

로그인 후 복사
"); } } ?>

项目地址:https://github.com/MediovskiTechnology/php-crontab-manager

2.Ssh2_crontab_manager 关于php管理计划任务的详细教程

具体内容参考:http://net.tutsplus.com/tutorials/php/managing-cron-jobs-with-php-2/

参考资料:http://stackoverflow.com/questions/4421020/use-php-to-create-edit-and-delete-crontab-jobs


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)