【linux Ubuntu系统中用定时任务crontab执行文件,url,拉取代码】
定时任务是个好东西啊,配合php简直太舒服了。
因为php没有定时任务这一说,php在代码里可以实现伪定时任务,但终究不是完美选择。
与Linux crontab结合就很好的达到定时任务效果。
之前的写得有点笼统,这里重新优化一下,后续继续更新完善。
1、 先确认PHP可执行文件目录(暂时不管它),一般为:
/usr/bin/php
2、确认要执行的文件必须为可用读写权限,我直接设置的0777
3、编辑如下命令(一般来说直接到这一步操作就可以了)
#用crontab -e命令打开任务编辑,如下:
# 每5分钟定时发起一个请求
*/5 * * * * curl 'http://sss.test.com/OA/OaNotice/index'
# 每分钟更新一次代码
*/1 * * * * cd /www/web/www.ss.com;git pull
# 每分钟删除一次文件夹
*/1 * * * * chown -R www-data:www-data /www/web/
# 每分钟执行PHP文件
*/1 * * * * /www/web/abc.playone.cn/task/order_warn_stask.php
其它例子:
执行时间 | 格式 |
---|---|
每分钟定时执行一次 | * * * * * |
每小时定时执行一次 | 0 * * * * |
每天定时执行一次 | 0 0 * * * |
每周定时执行一次 | 0 0 * * 0 |
每月定时执行一次 | 0 0 1 * * |
每月最后一天定时执行一次 | 0 0 L * * |
每年定时执行一次 | 0 0 1 1 * |
4、然后保存重启(一般来说是自动重启的,编辑并保存推出就可以了)。
提示:
启动:sudo /etc/init.d/cron start 关闭:sudo /etc/init.d/cron stop
重启:sudo /etc/init.d/cron restart 重新载入配置:sudo /etc/init.d/cron reload
可以用ps aux | grep cron命令查看cron是否已启动
5、调试(非必须,但遇到问题可以尝试去检查)
确认/usr/bin/php是否为PHP安装目录,一般是,但是确认起来很麻烦!(先确认其它情况吧)
确认要执行的PHP文件路径是否与任务文件中写的一致;
确认要执行的PHP文件代码是否错误,因为报错之后不会有提示;
确认要执行的文件是否具有读写权限;
可在命令窗口中输入命令直接访问任务文件中要访问的PHP文件;
例如:
php /var/www/html/task/realized_cash_task.php
看输出结果:
PHP Fatal error: Uncaught Error: Call to undefined function log_to_write_txt() in /var/www/html/task/realized_cash_task.php:10
Stack trace:
#0 {main}
thrown in /var/www/html/task/realized_cash_task.php on line 10
这里报错了。解决错误后再次执行:
看输出结果:
这里红框处是没有错误信息的。表示执行成功。
然后再等待任务是否自动执行。
如果这样都不成功,那说明可能是第1步的问题。
END
================【再次完善】=================
我按照上面的步骤在新的Ubuntu环境下执行不生效!
我的调试步骤:
1、在crontab任务列表中改一下写法(crontab -e 打开任务列表):
*/1 * * * * /var/www/html/task/realized_cash_task.php >> /var/whlog.txt
说明:意思是执行这个PHP文件同时把执行结果写在/var/whlog.txt中,这路径随便你自己写,只要能找到就行。
2、按照上面改完测试:
Exception: Zend Extension /var/www/html/task/realized_cash_task.php does not exist
显示这个,大概意思就是不支持执行PHP,因为Zend代表PHPZend引擎。
3、还是第1步的问题,解决它:
OK!经过一番冥思苦想加上询问运维同志,得出结论就是在任务列表中/var/www/html/task/realized_cash_task.php的/var前面加上php就可以了,php后面要加空格。(还是不确定是不是第一步的问题,肯定有关系,加上php就行了,继续写代码)
完整代码:
*/1 * * * * php /var/www/html/task/realized_cash_task.php >> /var/whlog.txt
再次重启,运行成功!
END