如何使用Ubuntu中的Crontab定时执行PHP文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Ubuntu中的Crontab定时执行PHP文件相关的知识,希望对你有一定的参考价值。

先确认自己在LINUX Ubuntu 服务器上php的安装模式,以CGI 模块还是Apache模块方式安装? 如果不确定php安装模式,可以使用 phpinfo() 函数查看:将<?php phpinfo(); ?> 写在php文件中上传到网站服务器,访问该页面,就在页面顶部我们找到“Server API”,如果类似“Apache 2.0 Handler”,那么就是apache模块;否则php是CGI 模式(shell 命令行模式)。这两种不同的php安装模式,正对应于前面介绍的ubuntu crontab 定时执行php的两种解决方法。
CGI 编译
如果Server API是cgi,那么在需要cron执行的php脚本的第一行额外加入一段代码#!/usr/bin/php -q(类似PERL语法),指定服务器中php可执行程序的位置,具体步骤如下:
1. 确认Ubuntu系统已经安装了php5-cli模块,安装命令:apt-get install php5-cli。在目录 /usr/bin/php下生成 php可执行程序。
2. 编辑待定时执行的php脚本文件crontab.php,如:
#!/usr/bin/php -q
<?php
$file = “/var/www/”.date(‘H’).’_’.date(‘i’).’_’.date(‘s’).’.txt’;
file_put_contents($file,date(‘Y-m-d’));
?>
3. 编辑 crontab 任务:
打开终端,输入命令:crontab -e,
Select an editor. To change later, run ‘select-editor’.
1. /bin/ed
2. /bin/nano <—- easiest
3. /usr/bin/vim.tiny
选择一个Ubuntu编辑器后,编辑/tmp/crontab.AuN7IQ/crontab 文件:
# m h dom mon dow command
在下面添加定时执行命令:
* * * * * php /path/to/your/cron.php
5个星号分别代表定时指定每分、小时、日、月、周。如每天的下午7点执行crontab.php,命令为:
* 19 * * * php /var/www/cron/crontab.php
然后按Ctrl+O保存,Ctrl+X退出。
4. 执行以下Crontab命令行
Shell> crontab crontab
确认crontab.php的权限为可执行("chmod 755 /var/www/cron/crontab.php")。
Apache 模块
如果php安装是以 apache 模式运行的,那么在要在ubuntu服务器定时执行的php脚本开头就不用加 #!/usr/bin/php -q 这一行。php脚本在ubuntu 通过crontab的定时执行通过Lynx浏览器的自动访问来完成。
1. Lynx浏览器安装。
Lynx浏览器是一款轻便的web浏览器,使用于大部分Unix 和Linux系统环境。安装命令:sudo apt-get install lynx。
2. 编辑cron任务,命令crontab -e
参考技术A 下面介绍Crontab的两种方法。

一、在Crontab中使用PHP执行脚本

就像在Crontab中调用普通的shell脚本一样(具体Crontab用法),使用PHP程序来调用PHP脚本。
每一小时执行myscript.php如下:
. 代码如下:

# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php

/usr/local/bin/php为PHP程序的路径。

二、在Crontab中使用URL执行脚本

如果你的PHP脚本可以通过URL触发,你可以使用lynx或curl或wget来配置你的Crontab。
下面的例子是使用Lynx文本浏览器访问URL来每小时执行PHP脚本。Lynx文本浏览器默认使用对话方式打开URL。但是,像下面的,我们在lynx命令行中使用-dump选项来把URL的输出转换来标准输出。
. 代码如下:

00 * * * * lynx -dump http://www.poluoluo.com/myscript.php

下面的例子是使用CURL访问URL来每5分执行PHP脚本。Curl默认在标准输出显示输出。使用”curl -o”选项,你也可以把脚本的输出转储到临时文件。
. 代码如下:

*/5 * * * * /usr/bin/curl -o temp.txt http://www.poluoluo.com/myscript.php

下面的例子是使用WGET访问URL来每10分执行PHP脚本。-q选项表示安静模式。”-O temp.txt”表示输出会发送到临时文件。本回答被提问者和网友采纳

Ubuntu使用crontab执行定时任务基础知识

参考技术A Ubuntu默认没有开启crontab日志,需要通过
sudo vim /etc/rsyslog.d/50-default.conf 来取消cron行的注释及重启系统日志服务( sudo service rsyslog restart )来启用日志记录。启用以后,就可以使用 tail -f /var/log/cron.log 查看crontab的日志了。
当然不修改上述配置也行,通过 /var/log/syslog 也可以查看日志,但是这种方式看日志不是很方便。

查看 crontab任务 crontab -l
编辑 crontab任务 crontab -e
启动定时任务 sudo service cron start
重启定时任务 sudo service cron restart
停止定时任务 sudo service cron stop
注意:修改或新增定时任务时记得启动定时任务或重启定时任务

1、 https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html
2、 http://cn.linux.vbird.org/linux_basic/0430cron.php

1.Ubuntu默认是西5区,跟北京时间相差11个小时,因此记得修改默认时区。 timedatectl set-timezone Asia/Shanghai Ubuntu修改时区和更新时间

1、利用之前 QQ机器人实现步骤 的技术 实现每周1至周五的上午8点50在QQ群里提醒成员进行打卡。
50 8 * * 1,2,3,4,5 curl http://127.0.0.1:5700/send_group_msg?group_id=xxx"&message="为了全勤,别忘记打卡哦

2、利用之前 QQ机器人实现步骤 的技术 实现每隔一分钟给xxx发生一条消息, 哈哈。。
*/1 * * * * curl http://127.0.0.1:5700?user_id=xxxx"&message="1

3、利用之前 QQ机器人实现步骤 的技术 实现每月的15号9点15分给xx发生信用卡还款的信息
15 9 15 * * curl http://127.0.0.1:5700/send_msg?user_id=xxxx&message=信用卡还款

以上是关于如何使用Ubuntu中的Crontab定时执行PHP文件的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu中Crontab定时执行python文件(可用于定时爬虫)

ubuntu使用crontab启动定时任务

ubuntu中执行定时任务crontab

Ubuntu使用crontab执行定时任务基础知识

ubuntu18.04crontab定时任务不执行

ubuntu 设置开机自启动 / 设置定时重启 / crontab 定时执行 / 后台执行