V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
SilencerL
V2EX  ›  分享创造

[Task 君] 一个可以高度自定义的定时任务托管平台

  •  2
     
  •   SilencerL · 2020-04-11 08:03:29 +08:00 · 9671 次点击
    这是一个创建于 1692 天前的主题,其中的信息可能已经有所发展或是发生改变。

    0x0

    当然是先上地址:Task 君 | Mr.Task


    初衷

    Task 君这个项目是引申自我曾经写过的一个 “实时监控指定微博用户的发文,对发文内容进行情绪判断、关键字抽取等,做到实时同步关心的人的心情的功能” 这样一个舔狗项目。但是经过一番修改之后,我发现好像不管怎么修改都不能太好的满足公开作为服务的目的。所以我把项目思路整理了一下之后决定做一个新的项目——可以高度自定义的任务托管平台。

    这个项目的目的是用户可以自己写一些代码,然后托管在平台上定时执行或者通过 URL 地址进行调用,只要用户会一点代码,不光是监测用户微博的功能,还能实现很多有意思的功能,比如当作一个简单的 Jenkins 来用、定时下载 Bing 的每日壁纸、作为自己服务的可用性检测等等。


    介绍

    Task 君为每一位用户提供了一个 Linux 环境,可以在允许的权限下完整的使用 Linux 的生态。目前已经内置的运行环境包括:

    • Console.WriteLine("dotNet Core 3.X");

    • console.info("NodeJS");

    • print("Python 2.x/3.x")

    • echo 'PHP';

    用户甚至可以自己上传一套需要的运行环境使用。

    Task 君的最小业务粒度为 脚本,用户可以编写不同的脚本来实现自己想要的功能。从简单的直接可运行的程序到需要安装一系列依赖或者其他依赖 Linux 环境的复杂任务,都可以根据自己的需求来编写脚本。


    资源限制

    为了保证用户资源的公平性和服务的可用性,Task 君目前有如下限制:

    • 用户可用磁盘空间为软性限制 125MB,硬性限制 150MB 。

      • 用户所建立的脚本、任务、定时器、日志等文件所使用的空间均包含在用户可用磁盘空间中。
    • 任务进程执行时间限制最长不超过 15min 。

    • 任务进程占用 CPU 和内存资源暂无限制。


    更多说明

    关于 Task 君的更多说明,请参阅 帮助文档

    若在使用中遇到无法解决的问题,请到 我的微博 联系我,或者到 MrTask Issues 提交 Issues 进行反馈。


    写在最后

    因为项目完全是我在工作闲暇之余开发,难免有一些 Bug 或者疏漏的地方,希望大家多多提出意见和建议!


    更多有趣的项目


    预览图

    UTOOLS1586563272710.png

    UTOOLS1586563276390.png

    UTOOLS1586563279213.png

    UTOOLS1586563281786.png

    UTOOLS1586563284367.png

    UTOOLS1586563286612.png

    UTOOLS1586563289198.png

    第 1 条附言  ·  2020-04-19 23:44:32 +08:00

    关于 任务 “执行失败” 的原因

    有时候任务执行后在日志中会提示执行失败,但是事实上可能只是标准输出流中存在警告信息,比如 pip 或其他依赖的版本过低,所以当看到 “执行失败” 的任务的时候,请手动点击查看日志判断下是否真的是阻塞整个任务的异常。

    下一个版本我会优化这个提示。


    当然,根据反馈来看,存在真正的异常导致执行失败的原因大部分都是没有安装依赖。如果你的脚本需要依赖,请使用自定义脚本,先安装依赖再执行脚本。

    Example

    Python

    test.py 是使用 Pyhton 3.x 的脚本,并且使用到了 requests 模块,则自定义脚本为:

    pip3 install requests --user
    python $HOME/test.py
    

    请记住,在使用 pip/pip3 的时候一定要带上 --user 参数

    NodeJS

    Node-Script 是存放 NodeJS 项目的目录,并且存在正确的 package.json,则自定义脚本为

    cd $HOME/Node-Script
    yarn
    node test.js
    
    44 条回复    2020-09-20 15:03:28 +08:00
    SilencerL
        1
    SilencerL  
    OP
       2020-04-11 08:51:57 +08:00
    # 补充
    因为需要将代码保存到服务器上,所以重要文件请务必设置为权限 700 (默认)不要修改。
    ai0by
        2
    ai0by  
       2020-04-11 09:09:09 +08:00
    从图上看是单节点的啊,目前使用 gocron,期待多节点
    lhx2008
        3
    lhx2008  
       2020-04-11 09:09:55 +08:00 via Android
    感觉和云 serverless 有点像
    SilencerL
        4
    SilencerL  
    OP
       2020-04-11 09:13:17 +08:00
    @ai0by
    Yep,目前还是单节点,下一步的目标就是多节点可选择 /迁移。

    @lhx2008
    是的,事实上大厂的 ServerLess 如果用的顺溜了绝对比 Task 君好(哈哈哈),Task 君主要就是方便+扩展性更强。
    labulaka521
        5
    labulaka521  
       2020-04-11 11:00:05 +08:00 via Android
    在做同样的事 握爪
    cy97cool
        6
    cy97cool  
       2020-04-11 12:57:34 +08:00
    前端不错噢 话说后端直接对接大厂的函数计算如何 改造难度大嘛?
    SilencerL
        7
    SilencerL  
    OP
       2020-04-11 22:39:07 +08:00
    @cy97cool
    后端对接函数计算可能就是全部重写了哈哈哈
    wysnylc
        8
    wysnylc  
       2020-04-13 14:54:51 +08:00   ❤️ 1
    写个定时领取奖励的平台,写一些公共一键模版,未来大有可期
    vtwoextb
        9
    vtwoextb  
       2020-04-13 16:09:10 +08:00
    这个页面前端框架的 主题 很好 ,在线求
    vtwoextb
        10
    vtwoextb  
       2020-04-13 16:09:47 +08:00
    后台的
    FakerLeung
        11
    FakerLeung  
       2020-04-13 17:39:36 +08:00
    @vtwoextb 盲猜 antd 。
    wangjhsir
        12
    wangjhsir  
       2020-04-13 20:41:57 +08:00
    不错,可以再加一个指定时间戳的 异步回调
    比如 举个例子 A 业务添加 item 后 希望 N 分钟后通知 B 业务做处理。这个可以是请求 B 的 api 接口。这样代码就可以保留在每个用户自己的服务器上。更加灵活
    SilencerL
        13
    SilencerL  
    OP
       2020-04-13 23:09:53 +08:00
    @vtwoextb
    @FakerLeung
    盲猜对了哈哈哈, 是阿里全家桶 antd pro + umi.
    SilencerL
        14
    SilencerL  
    OP
       2020-04-13 23:10:48 +08:00
    @wangjhsir
    这个需求感觉可以通过自定义脚本来实现呀~
    huxiweng
        15
    huxiweng  
       2020-04-13 23:51:49 +08:00
    有没有精确定时开源项目推荐(万级别的)
    mauve
        16
    mauve  
       2020-04-14 09:54:07 +08:00
    建议楼主下次发帖加上 .NET Core 字眼
    SilencerL
        17
    SilencerL  
    OP
       2020-04-14 11:34:39 +08:00
    @mauve
    为啥要特意强调 .NET Core 哈哈哈
    mclxly
        18
    mclxly  
       2020-04-14 11:42:28 +08:00
    LZ 厉害!

    顺便晒个域名:taskatm.com

    当初计划做类似的项目~
    mauve
        19
    mauve  
       2020-04-14 12:52:52 +08:00
    @SilencerL .NET Core/C# 程序员惺惺相惜
    tikazyq
        20
    tikazyq  
       2020-04-14 13:28:08 +08:00
    支持一个,楼主可以参考下我们的项目,跟你的有异曲同工之秒,不过我们是专注爬虫的

    https://github.com/crawlab-team/crawlab
    tikazyq
        21
    tikazyq  
       2020-04-14 13:49:45 +08:00   ❤️ 1
    体验了一下,简单评论一下。

    命名比较不友好。“脚本”、“文件”的概念容易混淆,建议脚本改为其他名字,例如“任务”之类的。进程乍一看真不知道咋回事,运行了之后才发现,其实是实际正在运行的“进程”,而且运行完就消失了。

    而且感觉 entity 没必要抽象这么多,其实“脚本”耦合到进程里就可以了,“文件”没问题,可以跟着“脚本”走。“任务”的概念真的多此一举,感觉需要学习很多概念,增大了学习成本。

    不过这个平台真的不错,只是要考虑可扩展性问题,使用的人一多,必然导致维护成本的增加,包括服务器资源。不如做“私服”版,把代码开源出来,让大家部署。
    wo8023xue
        22
    wo8023xue  
       2020-04-14 14:33:53 +08:00
    @mauve .NET Core/C# 程序员惺惺相惜
    SilencerL
        23
    SilencerL  
    OP
       2020-04-14 15:08:29 +08:00
    @mauve
    @wo8023xue

    嗐 干了五年 .NET ,曾经想坚持信仰一直干下去
    结果还是面向市场低了头转行前端了 233,不过还好有个 TypeScript 能爽一爽
    SilencerL
        24
    SilencerL  
    OP
       2020-04-14 15:12:52 +08:00 via iPhone
    @tikazyq
    感谢反馈~等汇总一下大家的意见我考虑修改一下业务的流程提高一下易用性。
    niuoh
        25
    niuoh  
       2020-04-14 16:23:05 +08:00
    建议在增加一种任务类型 常驻后台执行的任务
    niuoh
        26
    niuoh  
       2020-04-14 16:26:35 +08:00
    如果有个在线的 console 可以 手动安装管理环境 就更好了 然后再完善下文件管理的在线 ide 可以直接在线编辑服务器上的文件
    Mistwave
        27
    Mistwave  
       2020-04-14 20:43:54 +08:00 via iPhone
    收藏一下 明天研究看看
    SilencerL
        28
    SilencerL  
    OP
       2020-04-15 11:02:05 +08:00
    @niuoh
    关于"常驻后台执行"的任务, 这个应该不会添加了, 因为这个项目的目的就是托管一些"需要在某些条件下触发, 运行完即退出" 的任务.
    关于在线 console 的话下个版本会考虑添加哦~ 现在可以使用自定义类型的脚本, 比如:

    ----nodejs----
    cd $HOME/example
    yarn
    node start.js
    ----------------
    huayumo
        29
    huayumo  
       2020-04-16 17:44:12 +08:00
    简单的阿里云上好像有免费的监控,比如买东西有货了,就给你发短信
    Aether
        30
    Aether  
       2020-04-16 20:02:41 +08:00
    之前看到过 https://clock.sh/
    ddup
        31
    ddup  
       2020-04-16 21:52:01 +08:00
    支持 .NET Core ? 好评
    SilencerL
        32
    SilencerL  
    OP
       2020-04-16 23:29:57 +08:00
    @ddup
    .NET Core/C# 程序员惺惺相惜 +1
    wework
        33
    wework  
       2020-04-17 09:29:14 +08:00
    哈哈,貌似你很喜欢 .tools 后缀啊,不错
    ddup
        34
    ddup  
       2020-04-17 09:38:37 +08:00
    @mauve #18
    @wo8023xue #21
    哈哈哈
    .NET Core/C# 程序员惺惺相惜++
    SenLief
        35
    SenLief  
       2020-04-17 10:21:43 +08:00
    可惜不能做轮询,哈哈。
    CoCoMcRee
        36
    CoCoMcRee  
       2020-04-17 14:59:34 +08:00
    在用 gocron 的+1
    oxogenesis
        37
    oxogenesis  
       2020-04-18 21:12:34 +08:00
    @tikazyq 同意#21,好东西可以开源,让大家部署私服
    Arrowing
        38
    Arrowing  
       2020-04-19 11:42:00 +08:00
    哈哈,这个和我的一个想法很类似,不过你界面做得很棒!
    SilencerL
        39
    SilencerL  
    OP
       2020-04-19 23:46:17 +08:00
    @oxogenesis
    等我把代码整理一下写得漂亮点再考虑开源😂现在开源真是献丑了。。


    @Arrowing
    感谢你的称赞~
    Terang
        40
    Terang  
       2020-04-25 23:53:34 +08:00
    感觉可以接入 ifttt?(我的好多定时任务都扔那上面的 hh ) action 挺多的
    hq
        41
    hq  
       2020-04-26 00:24:17 +08:00
    同学你已经通过我云函数计算方向的一轮技术面试,方便的时候约下后面的面试。
    SilencerL
        42
    SilencerL  
    OP
       2020-04-26 00:35:32 +08:00
    @Terang
    一切皆有可能(斜眼 只要能写出脚本

    @hq
    哦天呐, 真的吗, 但是能帮我内推蚂蚁 mPaaS 吗, 我暗恋对象在里面哈哈哈哈哈(狗头
    hq
        43
    hq  
       2020-04-28 00:40:39 +08:00
    @SilencerL 我的邮箱 aG9uZ3FpLndhbmdAYWxpYmFiYS1pbmMuY29t,还是建议先考虑我们,构建一些好玩有用的应用是就是工作的一部分。
    huai
        44
    huai  
       2020-09-20 15:03:28 +08:00
    请问有多少请求限制呢? 比如 Github Action 每个小时 最多 1k 次请求
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3098 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:11 · PVG 22:11 · LAX 06:11 · JFK 09:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.