我写了一个爬虫程序,希望设置成开机启动,每一次爬完成之后,隔 10 分钟运行一次,不想用计划任务啊,请问在 go 本身能实现吗?
|
1
我不懂 go 但应该就是 sleep()之类的延迟函数把 需要脚本在后台一直运行
|
|
2
sleep 好像不是最佳方案
|
|
3
select 阻塞
|
|
4
守护进程用 init 、 supervisor 或者 upstart
程序每隔 10 分钟跑一次就用 time.NewTicker 弄个 loop, 再配合 goroutine |
|
5
为什么不想用 cron
|
|
6
go 有一个 cron 包,你可以看看。。。
|
|
7
crontab 啊。
|
|
8
@zhaohui318 因为爬虫需要时间,比如我设置 10 分钟执行一次,爬虫执行了 11 分钟,这就乱套了,我需要爬虫程序结束后间隔 10 分钟再运行,靠 crond 控制时间不靠谱啊
|
|
9
robfig/cron 包做定时任务, supervisor 或者 systemd 做守护进程
其实我更推荐用系统 crontab , 10min 一次不一定需要常驻 |
|
11
推荐用 crontab 加文件锁(保证只开一个进程,这样即使某次执行时间超过 10 分钟,最新被 crontab 的程序会因为文件锁的存在可以直接退出)
|
|
ayvMay 9, 2016
12
&
|
|
13
这里 main 函数最后执行 select{} 即可挂起程序.
|
|
14
for {
select { case <-time.After(10 * time.Minute): //todo } } |
|
16
systemd 可以,用 daemon 模式, enable 设置为开机启动,可以设置退出重启,重启时间间隔为 10 分钟即可
|
|
znoodlMay 9, 2016 via iPhone
17
错了,不是 daemon 模式,就是阻塞运行的那个模式
|
|
timothyyeMay 9, 2016
18
感觉 crontab 不是更好一些……
|
|
likukuMay 10, 2016
20
简单啊,爬虫启动时,探测下系统中是否有自身名字的进程在运行,假若已经有就终止运行退出。
|
|
araralorenMay 10, 2016
21
我想说的是。。 你的问题和题目的意思有点。。
|
|
darasionMay 10, 2016
22
可以读一下 apue 的相关章节。
|
|
pierre1994May 10, 2016
23
supervisor ?
|
|
jimmyyeMay 10, 2016
24
在文件或数据库记录运行状态:正在运行或者上次结束时间,设置 cron 每分钟一次,读取状态,如果正在运行或者距离上次结束时间不到 10 分钟就退出,否则继续。
|