
1 niuoh 2016-05-09 20:40:21 +08:00 我不懂 go 但应该就是 sleep()之类的延迟函数把 需要脚本在后台一直运行 |
2 herozzm OP sleep 好像不是最佳方案 |
3 peter999 2016-05-09 20:54:55 +08:00 select 阻塞 |
4 Zzzzzzzzz 2016-05-09 21:08:16 +08:00 守护进程用 init 、 supervisor 或者 upstart 程序每隔 10 分钟跑一次就用 time.NewTicker 弄个 loop, 再配合 goroutine |
5 zhaohui318 2016-05-09 21:46:52 +08:00 为什么不想用 cron |
6 qyz0123321 2016-05-09 21:48:47 +08:00 go 有一个 cron 包,你可以看看。。。 |
7 liujiangbei 2016-05-09 21:50:33 +08:00 crontab 啊。 |
8 herozzm OP @zhaohui318 因为爬虫需要时间,比如我设置 10 分钟执行一次,爬虫执行了 11 分钟,这就乱套了,我需要爬虫程序结束后间隔 10 分钟再运行,靠 crond 控制时间不靠谱啊 |
9 fuxiaohei 2016-05-09 21:52:13 +08:00 robfig/cron 包做定时任务, supervisor 或者 systemd 做守护进程 其实我更推荐用系统 crontab , 10min 一次不一定需要常驻 |
11 chzyer 2016-05-09 21:59:10 +08:00 推荐用 crontab 加文件锁(保证只开一个进程,这样即使某次执行时间超过 10 分钟,最新被 crontab 的程序会因为文件锁的存在可以直接退出) |
12 ayv 2016-05-09 22:12:57 +08:00 & |
13 yougg 2016-05-09 22:29:15 +08:00 这里 main 函数最后执行 select{} 即可挂起程序. |
14 moro 2016-05-09 22:58:44 +08:00 for { select { case <-time.After(10 * time.Minute): //todo } } |
16 znoodl 2016-05-09 23:06:20 +08:00 via iPhone systemd 可以,用 daemon 模式, enable 设置为开机启动,可以设置退出重启,重启时间间隔为 10 分钟即可 |
17 znoodl 2016-05-09 23:08:40 +08:00 via iPhone 错了,不是 daemon 模式,就是阻塞运行的那个模式 |
18 timothyye 2016-05-09 23:28:16 +08:00 感觉 crontab 不是更好一些…… |
20 likuku 2016-05-10 08:23:12 +08:00 简单啊,爬虫启动时,探测下系统中是否有自身名字的进程在运行,假若已经有就终止运行退出。 |
21 araraloren 2016-05-10 08:53:25 +08:00 我想说的是。。 你的问题和题目的意思有点。。 |
22 darasion 2016-05-10 08:56:32 +08:00 可以读一下 apue 的相关章节。 |
23 pierre1994 2016-05-10 12:13:48 +08:00 supervisor ? |
24 jimmyye 2016-05-10 15:39:36 +08:00 在文件或数据库记录运行状态:正在运行或者上次结束时间,设置 cron 每分钟一次,读取状态,如果正在运行或者距离上次结束时间不到 10 分钟就退出,否则继续。 |