使用 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 定时任务为什么需要用户登录鉴权? 系统内部的定时任务为什么还要具体用户登录? 即使是为了分角色管理权限, 也应该是在数据库上去设置具体权限吧, 觉得不应该和登录系统参合在一起.
- 3 回答
- 0 关注
- 1226 浏览
添加回答
举报
0/150
提交
取消