LeonLee 2016-08-17 10:18:52 12666次浏览 7条评论 36 13 0

Yii2 后台脚本管理

管理后台通常有些脚本需要运行,这些脚本有些是只运行一次,有些是每隔一段时间运行,有些是每天固定时间运行的,如果更加方便地管理这些脚本呢?我写了一个任务管理后台,在新加脚本后,只需进行简单配置,便可以让这些脚本自动运行。

思路:

  1. 启动主进程(通常放到crontab中,每隔几分钟检测一下,如果没启动,则自动启动,否则不再重新启动)。
  2. 由主进程扫描任务列表,如果有符合条件的任务,则启动。
  3. 主进程将检查超时任务并自动杀掉。

优点:

新建脚本只需关心业务逻辑,如何执行可以放到上线后自动配置生效。任务启动和结束自动记录执行时间,在
任务执行期间可随意加入业务日志,在控制台中很方便就可以查看所有任务执行的日志。
时间仓促,写得比较简单,有做过的朋友可以一起讨论下。

Git地址: https://github.com/leonlee985/console-task-management
系统截图如下:
新建--》
new.png

列表--》
index.png

点击查看执行日志--》
console-log.png

觉得很赞
  • 评论于 2016-08-22 09:09 举报

    真心点赞,辛苦啦。

  • 评论于 2016-08-25 15:41 举报

    好东西!真心点赞!!!

  • 评论于 2016-08-27 14:54 举报

    好东西!真心不错啊,学习了。

  • 评论于 2016-08-29 09:59 举报

    非常适用 谢谢

  • 评论于 2016-08-31 11:11 举报

    我当时考虑了以下一些情况,有哪些没考虑到的情况麻烦大家指出:

    1. 主进程被意外关闭,或者意外关机。
      解决方法: 把主进程放到crontab里,隔一段时间调用一次(根据脚本的重要性设置时间长短)。这样即使进程突然挂了,过一段时间也会自动重启。机器挂了,在重启时也会自动启动。(当然,如果服务器挂了还没立即检测到并重启,那就该找运维同学谈谈心了.)
    2. 同一脚本被同时(并发)调用,或者脚本在执行时,又有另一个进程来调用。
      解决方法: 在启动脚本的时候,检查内存中是否有该脚本的进程,如有就不调用,避免并发引起问题。
      当然,如果希望并发,可以考虑使用多线程的方法。不过不太建议使用PHP做多线程。
    3. 一个脚本执行时间过长,有可能造成资源死锁
      解决方法:设置脚本最大执行时间,如果主进程扫描到某脚本执行超时,则强制杀掉该进程。
    4. 如何知道脚本的执行情况,是成功还是失败。
      解决方法:在控制器里封装了公共的日志记录方法,脚本里可以打印一些关键信息到该日志里,然后脚本在执行完成后应该返回true/false告知主进程是否调用成功。所有的日志都记录在数据库里,方便查询。
    5. 针对不同类型脚本执行失败情况的考虑
      无固定解决方法,根据实际业务决定不同类型脚本是否需要失败重试以及重试次数。甚至可以自己加入监控,脚本失败时发邮件或通知。
    觉得很赞
  • 评论于 2016-09-14 11:41 举报

    那些界面什么的都没有啊,请问怎样让他跑起来?

    1 条回复
    评论于 2016-09-18 09:46 回复

    这个主要是为了console的管理,我只给出了核心代码,至于界面长什么样子,你可以自己定制。

  • 评论于 2018-01-17 15:56 举报

    求完整后台源码

    觉得很赞
您需要登录后才可以评论。登录 | 立即注册