为了账号安全,请及时绑定邮箱和手机立即绑定

Shell 脚本执行 PHP 命令

Shell 脚本执行 PHP 命令

PHP
哈士奇WWW 2019-03-18 15:25:06
使用 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 #这里应该是执行不了的,因为没有从框架入口进来 #怎么才能直接执行? 有两个问题: 是否所有定时任务都得另外写入口? 怎么才能直接执行框架内写的定时任务,不走 http ?
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

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

查看完整回答
反对 回复 2019-03-18
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

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

查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 1226 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信