The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
herozzm

go 程序怎么常驻进程(或者叫守护进程)中(非 web 应用)

  •  
  •   herozzm · May 9, 2016 · 4408 views
    This topic created in 3832 days ago, the information mentioned may be changed or developed.
    我写了一个爬虫程序,希望设置成开机启动,每一次爬完成之后,隔 10 分钟运行一次,不想用计划任务啊,请问在 go 本身能实现吗?
    Supplement 1  ·  May 9, 2016
    暂时用 crond ,设置间隔时间长点,其实程序抓取只需要几秒,后面会慢慢增加更多进程爬取,再想办法吧
    25 replies  •  2020-12-30 16:39:09 +08:00
    niuoh
    niuoh
    May 9, 2016❤️1
    1
    我不懂 go 但应该就是 sleep()之类的延迟函数把 需要脚本在后台一直运行
    herozzm
    herozzm
    OP
    May 9, 2016
    2
    sleep 好像不是最佳方案
    peter999
    peter999
    May 9, 2016❤️1
    3
    select 阻塞
    Zzzzzzzzz
    Zzzzzzzzz
    May 9, 2016❤️1
    4
    守护进程用 init 、 supervisor 或者 upstart
    程序每隔 10 分钟跑一次就用 time.NewTicker 弄个 loop, 再配合 goroutine
    bqbkbz
    bqbkbz
    May 9, 2016❤️1
    5
    为什么不想用 cron
    qyz0123321
    qyz0123321
    May 9, 2016❤️1
    6
    go 有一个 cron 包,你可以看看。。。
    liujiangbei
    liujiangbei
    May 9, 2016❤️1
    7
    crontab 啊。
    herozzm
    herozzm
    OP
    May 9, 2016
    8
    @zhaohui318 因为爬虫需要时间,比如我设置 10 分钟执行一次,爬虫执行了 11 分钟,这就乱套了,我需要爬虫程序结束后间隔 10 分钟再运行,靠 crond 控制时间不靠谱啊
    fuxiaohei
    fuxiaohei
    May 9, 2016❤️1
    9
    robfig/cron 包做定时任务, supervisor 或者 systemd 做守护进程

    其实我更推荐用系统 crontab , 10min 一次不一定需要常驻
    fuxiaohei
    fuxiaohei
    May 9, 2016
    10
    @herozzm 这个就是用 sleep ,不是按照时刻走的
    chzyer
    chzyer
    May 9, 2016❤️1
    11
    推荐用 crontab 加文件锁(保证只开一个进程,这样即使某次执行时间超过 10 分钟,最新被 crontab 的程序会因为文件锁的存在可以直接退出)
    ayv
    ayv
    May 9, 2016
    12
    &
    yougg
    yougg
    May 9, 2016❤️1
    13
    这里 main 函数最后执行 select{} 即可挂起程序.
    moro
    moro
    May 9, 2016❤️1
    14
    for {
    select {
    case <-time.After(10 * time.Minute):
    //todo
    }
    }
    knightdf
    knightdf
    May 9, 2016❤️1
    15
    @herozzm crontab 是可以等到上一次任务结束了才开始下一次任务的
    znoodl
    znoodl
    May 9, 2016 via iPhone❤️1
    16
    systemd 可以,用 daemon 模式, enable 设置为开机启动,可以设置退出重启,重启时间间隔为 10 分钟即可
    znoodl
    znoodl
    May 9, 2016 via iPhone
    17
    错了,不是 daemon 模式,就是阻塞运行的那个模式
    timothyye
    timothyye
    May 9, 2016
    18
    感觉 crontab 不是更好一些……
    herozzm
    herozzm
    OP
    May 10, 2016
    19
    @moro 爬虫高耗时的情况夏,个人感觉此解为最优解,多谢
    likuku
    likuku
    May 10, 2016
    20
    简单啊,爬虫启动时,探测下系统中是否有自身名字的进程在运行,假若已经有就终止运行退出。
    araraloren
    araraloren
    May 10, 2016
    21
    我想说的是。。 你的问题和题目的意思有点。。
    darasion
    darasion
    May 10, 2016
    22
    可以读一下 apue 的相关章节。
    pierre1994
    pierre1994
    May 10, 2016
    23
    supervisor ?
    jimmyye
    jimmyye
    May 10, 2016
    24
    在文件或数据库记录运行状态:正在运行或者上次结束时间,设置 cron 每分钟一次,读取状态,如果正在运行或者距离上次结束时间不到 10 分钟就退出,否则继续。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1286 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 21:49 · PVG 05:49 · LAX 13:49 · JFK 16:49
    ♥ Do have faith in what you're doing.