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
#这里应该是执行不了的,因为没有从框架入口进来
#怎么才能直接执行?
有两个问题:
- 是否所有定时任务都得另外写入口?
- 怎么才能直接执行框架内写的定时任务,不走 http ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
所谓 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这样可以直接定位到对应方法