H5W3
当前位置:H5W3 > 其他技术问题 > 正文

Shell 脚本执行 PHP 命令

使用 Shell 脚本管理执行 PHP 的定时任务

shell 脚本如下

   cro_file=$dir_or_file"/crontab_php"
    #文件是否存在
   if [ -f $cro_file ]
   then
      # 这里实际操作不是cat 
       cat $cro_file
   else
      echo "$cro_file not found."
   fi

crontab_php 内容格式(使用Tp5 框架结构)

# 这里有个疑问,就是是否所有定时任务都得另外写入口?不需要登录验证
# 因为有些定时任务是写在后台的,前台没有入口
application\index\index\index.php


实际执行命令

 php  application\\index\\index\\index.php
 #这里应该是执行不了的,因为没有从框架入口进来
 #怎么才能直接执行?

有两个问题:

  1. 是否所有定时任务都得另外写入口?
  2. 怎么才能直接执行框架内写的定时任务,不走 http ?

回答:

所谓 web 框架就是一个 http 请求框架, 无论多轻量级的框架, 也会包括 路由, MVC, html 模板
等功能. 具体到 php 的框架, 就是面对一次会话的.
所以按我理解定时任务没法写在框架里面: 你要写在哪一层呢? 写在 Controller 里面? 那不还是得模拟一个请求出来. 模拟请求对 负载均衡, 反向代理, cron 日志查看 等都会带来麻烦. 与其自找麻烦, 不如另起一个项目了.
cron 任务可以单独写在一个项目里, 不和 http 请求框架关联. 比如就叫 php_cron 项目, 里面就是按照单纯的脚本来维护的. 如果有需要连接数据库等资源的地方, 就统一 include 一个专用的 php 文件进来, 比如 mysql_connect.php . 这样就相当于在这个项目中单独维护若干个公共 php 文件即可. 这比硬模拟一个请求去走框架要省性能, 也清晰的多. 对于小点的项目, 这样做就足够了. 大点的项目得考虑把定时任务管理起来.
另外, cron 定时任务为什么需要用户登录鉴权? 系统内部的定时任务为什么还要具体用户登录? 即使是为了分角色管理权限, 也应该是在数据库上去设置具体权限吧, 觉得不应该和登录系统参合在一起.

回答:

tp可以写个cli入口,假设为cli.php,然后可以执行php cli.php 控制器/方法

回答:

1、定时任务另外写入口比较方便管理。
2、PHP用框架的话是统一了入口文件,用框架写可以新起一个入口文件,在这个入口文件中可定义$_GET这样可以直接定位到对应方法

本文地址:H5W3 » Shell 脚本执行 PHP 命令

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址