首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xzc2677
V2EX  ›  问与答

有脚本每隔 1s 访问一个页面,如果有更新会生成一个静态 html 页面并 git push 到 coding 上。现在的问题是如果有两次间隔很短的 git push 就会出错(第一次 push 未结束)

  •  
  •   xzc2677 · 57 天前 · 762 次点击
    这是一个创建于 57 天前的主题,其中的信息可能已经有所发展或是发生改变。

    询问解决方案。没有国内的云主机,也不想自己写一个 server。 脚本用的是 typescript,关键代码大概这样:

     const writeFile = util.promisify(fs.writeFile)
     await writeFile(`${repoPath}/${name}.html`, article)
     await exec(`cd ${repoPath}; git pull; git add --all; git commit -m "auto commit" && git push origin master`)
    
    
    10 回复  |  直到 2019-11-21 23:53:10 +08:00
    parorisim
        1
    parorisim   57 天前 via iPhone
    降低 push 频率咋样?
    JiShuTui
        2
    JiShuTui   57 天前
    加上锁,上一次没结束,这一次就不执行。
    另外,你只是自己一个人用吧,每 5 分 push 一次也行啊
    xzc2677
        3
    xzc2677   57 天前
    @parorisim 不行,实时性要求比较高。
    xzc2677
        4
    xzc2677   57 天前
    @JiShuTui 不是一个人用。加锁是一个备选方案。我在想有没有代替 git 的方案?或者有么有这类的服务,类似于 server 酱。
    xxx749
        5
    xxx749   57 天前 via Android
    加个任务栈,只在 push 结束后 push 第二个任务,爬虫就只管往栈里推就好了吧
    xzc2677
        6
    xzc2677   57 天前
    @xxx749 感觉可行!是任务队列吧,一个一个进。感谢!
    opengps
        7
    opengps   57 天前 via Android
    用线程池来提交,同时控制好不要让整个线程池都工作起来
    CEBBCAT
        8
    CEBBCAT   57 天前
    先分析问题本质:有一个频繁更新的文件夹,里面有很多 html 文件,需要使用 Coding 的 Page 服务发布出来,似乎 Coding 只提供 git,要是使用 git push 推送的话容易因为上一次 push 未完成影响这一次 push

    整个信号量,有 html 生成就给计数器+1,另一边每次 git push 就给计数器-1,push 前记得检查有没有待 git add 的文件
    CEBBCAT
        9
    CEBBCAT   57 天前
    两边各干各的,效率也高
    xzc2677
        10
    xzc2677   57 天前
    @CEBBCAT thx 一个新思路。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1654 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 00:11 · PVG 08:11 · LAX 16:11 · JFK 19:11
    ♥ Do have faith in what you're doing.