linux使用crontab实现PHP执行定时任务

2017-4-10 admin CentOS

于linux来说用crontab实现更加合理。


首先说说cron,它是一个linux下的定时执行工具。根用户以外的用户可以使用 crontab 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在/var/spool/cron 目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入 crontab -e 命令来编辑该用户的 crontab。该文件使用的格式和 /etc/crontab 相同。当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名被保存,并写入文件 /var/spool/cron/username 中。cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。


安装crontab:

yum install crontabs


说明:

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置


 


查看crontab服务状态:service crond status


手动启动crontab服务:service crond start


查看crontab服务是否已设置为开机启动,执行命令:ntsysv


加入开机自动启动:

chkconfig –level 35 crond on


crontab命令:


功能说明:设置计时器。


语  法:crontab [-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr]


补充说明:cron是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使 用计时器的功能。其配置文件格式如下:

Minute Hour Day Month DayOFWeek Command


参  数:

-e  编辑该用户的计时器设置。

-l  列出该用户的计时器设置。

-r  删除该用户的计时器设置。

-u<用户名称>  指定要设定计时器的用户名称。


crontab 格式:


基本格式 :


分钟   小时   日   月   星期   命令


*        *      *    *     *       *


第1列表示分钟1~59 每分钟用*或者 */1表示

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列 表示月份1~12

第5列标识号星期0~6(0表示星期天)

第6列要运行的命令


记住几个特殊符号的含义: 

“*”代表取值范围内的数字, 

“/”代表”每”, 

“-”代表从某个数字到某个数字, 

“,”分开几个离散的数字 


# Use the hash sign to prefix a comment

# +—————- minute (0 – 59)

# | +————- hour (0 – 23)

# | | +———- day of month (1 – 31)

# | | | +——- month (1 – 12)

# | | | | +—- day of week (0 – 7) (Sunday=0 or 7)

# | | | | |

# * * * * * command to be executed


crontab几个例子如下:


(1)第一个例子。


30 21 * * * /etc/init.d/nginx restart

每晚的21:30重启 nginx。


(2)第二个例子,也就是本教程测试的例子


* * * * * /usr/bin/php -f /root/test.php >> test.log



每一分钟执行/root/test.php文件,将结果输出到test.log中。


完成了上面基础工作后,就来看看怎么使用crontab定时执行PHP脚本:


(1)我在/root下新建test.php文件,内容如下:


        #!/usr/bin/php -q

        echo  date('Y-m-d H:i:s')."from http://www.phpddt.com \n";

?>


说明:你可以用whereis php查找php执行文件位置。


(2)然后crontab -e编写如下shell:


* * * * * /usr/bin/php -f /root/test.php >> test.log


说明:test.php必须为可执行文件:chmod +x test.php


测试结果很正常,截图如下:




当然你可以用使用crontab -e继续添加任务,在/var/spool/cron下你可以看到一个root文件。


浏览(1858)

php sockets扩展安装配置详解

2017-4-8 admin CentOS

今天安装cacti发现需要php sockets扩展,而现在的lnmp没有安装,于是想到了phpzie工具安装扩展,安装方法如下:

linux中打开sockets扩展

1.cd php-5.3.8/ext/sockets/
2./usr/local/php/bin/phpize
3../configure --enable-sockets --with-php-config=/usr/local/php/bin/php-config
4.make
5.make install 

接着在/etc/php.ini添加加载扩展代码:

1.extension=sockets.so
service php-fpm reload或service httpd reload 

浏览(1566)

基于PHP Socket配置以及实例的详细介绍

2017-4-8 admin CentOS

本文文章是对PHP中Socket的配置以及实例进行了详细的分析介绍,需要的朋友参考下

2个php测试文件
server.php

<?php
     //phpinfo();
//确保在连接客户端时不会超时
set_time_limit(0);
$ip = '127.0.0.1';
$port = 1935;
/*
 +-------------------------------
 *    @socket通信整个过程
 +-------------------------------
 *    @socket_create
 *    @socket_bind
 *    @socket_listen
 *    @socket_accept
 *    @socket_read
 *    @socket_write
 *    @socket_close
 +--------------------------------
 */
/*----------------    以下操作都是手册上的    -------------------*/
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
    echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
}
if(($ret = socket_bind($sock,$ip,$port)) < 0) {
    echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
}
if(($ret = socket_listen($sock,4)) < 0) {
    echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
}
$count = 0;
do {
    if (($msgsock = socket_accept($sock)) < 0) {
        echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
        break;
    } else {

        //发到客户端
        $msg ="测试成功!\n";
        socket_write($msgsock, $msg, strlen($msg));

        echo "测试成功了啊\n";
        $buf = socket_read($msgsock,8192);

        
        $talkback = "收到的信息:$buf\n";
        echo $talkback;

        if(++$count >= 5){
            break;
        };

    
    }
    //echo $buf;
    socket_close($msgsock);
} while (true);
socket_close($sock);
?>



client.php



<?php
     //phpinfo();
//确保在连接客户端时不会超时
set_time_limit(0);
$ip = '127.0.0.1';
$port = 1935;
/*
 +-------------------------------
 *    @socket通信整个过程
 +-------------------------------
 *    @socket_create
 *    @socket_bind
 *    @socket_listen
 *    @socket_accept
 *    @socket_read
 *    @socket_write
 *    @socket_close
 +--------------------------------
 */
/*----------------    以下操作都是手册上的    -------------------*/
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
    echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
}
if(($ret = socket_bind($sock,$ip,$port)) < 0) {
    echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
}
if(($ret = socket_listen($sock,4)) < 0) {
    echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
}
$count = 0;
do {
    if (($msgsock = socket_accept($sock)) < 0) {
        echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
        break;
    } else {

        //发到客户端
        $msg ="测试成功!\n";
        socket_write($msgsock, $msg, strlen($msg));

        echo "测试成功了啊\n";
        $buf = socket_read($msgsock,8192);

        
        $talkback = "收到的信息:$buf\n";
        echo $talkback;

        if(++$count >= 5){
            break;
        };

    
    }
    //echo $buf;
    socket_close($msgsock);
} while (true);
socket_close($sock);
?>





侦听
#/ usr / local / php / bin / php /usr/local/apache2/htdocs/server.php

请求
#/ usr / local / php / bin / php /usr/local/apache2/htdocs/client.php

默认PHP是没有开启Socket的
 

#cd ./ext/sockets/

#/ usr / local / php / bin / phpize

#./configure --enable-sockets --with-php-config = / usr / local / php / bin / php-config

#make

#make install

php.ini修改配置

增加

extension = sockets.so
 

重启apache
#/ usr / local / apache2 / bin / apachectl restart

===================


Windows下的配置
修改php.ini

extension = php_sockets.dll

重启apache

cmd下起2个

php的安装目录

C:/php/php.exe F:web / server.php

C:/php/php.exe F:web / client.php

浏览(1705)


Powered by emlog 豫ICP备17010739号