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

2019-11-21 22:12:21 +08:00
 xzc2677

询问解决方案。没有国内的云主机,也不想自己写一个 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`)

1717 次点击
所在节点    问与答
10 条回复
vanillaxxx
2019-11-21 22:23:36 +08:00
降低 push 频率咋样?
JiShuTui
2019-11-21 22:26:02 +08:00
加上锁,上一次没结束,这一次就不执行。
另外,你只是自己一个人用吧,每 5 分 push 一次也行啊
xzc2677
2019-11-21 22:26:09 +08:00
@parorisim 不行,实时性要求比较高。
xzc2677
2019-11-21 22:28:53 +08:00
@JiShuTui 不是一个人用。加锁是一个备选方案。我在想有没有代替 git 的方案?或者有么有这类的服务,类似于 server 酱。
xxx749
2019-11-21 22:33:57 +08:00
加个任务栈,只在 push 结束后 push 第二个任务,爬虫就只管往栈里推就好了吧
xzc2677
2019-11-21 22:37:59 +08:00
@xxx749 感觉可行!是任务队列吧,一个一个进。感谢!
opengps
2019-11-21 22:43:02 +08:00
用线程池来提交,同时控制好不要让整个线程池都工作起来
CEBBCAT
2019-11-21 23:16:13 +08:00
先分析问题本质:有一个频繁更新的文件夹,里面有很多 html 文件,需要使用 Coding 的 Page 服务发布出来,似乎 Coding 只提供 git,要是使用 git push 推送的话容易因为上一次 push 未完成影响这一次 push

整个信号量,有 html 生成就给计数器+1,另一边每次 git push 就给计数器-1,push 前记得检查有没有待 git add 的文件
CEBBCAT
2019-11-21 23:17:30 +08:00
两边各干各的,效率也高
xzc2677
2019-11-21 23:53:10 +08:00
@CEBBCAT thx 一个新思路。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/621911

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX