请教,程序要 7x24 小时的运行,要写一个定时启动的任务,每天 12 点重启一下 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
BadCat
V2EX    程序员

请教,程序要 7x24 小时的运行,要写一个定时启动的任务,每天 12 点重启一下

  •  
  •   BadCat 2017-11-17 09:32:26 +08:00 7828 次点击
    这是一个创建于 2895 天前的主题,其中的信息可能已经有所发展或是发生改变。

    没有这方面的经验,请问该如何下手去写

    39 条回复    2017-11-17 16:28:34 +08:00
    Gothack
        1
    Gothack  
       2017-11-17 09:36:26 +08:00 via iPhone
    crontab
    wataxiwax
        2
    wataxiwax  
       2017-11-17 09:38:11 +08:00
    可以看下 crontab 命令
    BadCat
        3
    BadCat  
    OP
       2017-11-17 09:40:07 +08:00
    @Gothack 是用 win 系统自带的那个任务计划吗?
    @wataxiwax 是用 win 系统自带的那个任务计划吗?
    xiaoz
        4
    xiaoz  
       2017-11-17 09:44:31 +08:00 via Android
    win 任务计划
    linux crontab
    ceyes
        5
    ceyes  
       2017-11-17 09:48:05 +08:00
    真正的问题是什么呢,为什么需要“每天 12 点重启一下”?
    BadCat
        6
    BadCat  
    OP
       2017-11-17 09:48:25 +08:00
    @xiaoz 好的,多谢
    /table>
    calming
        7
    calming  
       2017-11-17 09:50:53 +08:00
    你要是 spring 的话直接上 Scheduled
    cy97cool
        8
    cy97cool  
       2017-11-17 09:50:58 +08:00 via Android
    定时任务即可。。。准备两个 exe,定时启动 a.exe
    a.exe 先调用 taskkill /f /im b.exe 强制结束 b.exe ,然后启动 b.exe
    b.exe 是执行任务的主体
    airyland
        9
    airyland  
       2017-11-17 09:53:15 +08:00   1
    楼主头像。。
    BadCat
        10
    BadCat  
    OP
       2017-11-17 09:57:26 +08:00
    @calming 我是 winform 程序。。
    @cy97cool 试试你这个,我用定时计划好像不管用
    fuyufjh
        11
    fuyufjh  
       2017-11-17 10:00:19 +08:00
    应该在醒目位置写上“ windows 环境”
    Aliencn
        12
    Aliencn  
       2017-11-17 10:01:02 +08:00
    一个批处理循环检测进程不存在就启动。
    再加一个计划任务指定时间杀进程。
    daemonghost
        13
    daemonghost  
       2017-11-17 10:26:00 +08:00
    @BadCat 为什么要定时重启,而不是做成服务监控,然后再重启呢?
    BadCat
        14
    BadCat  
    OP
       2017-11-17 10:30:13 +08:00
    @daemonghost 不是一样吗 -.=
    snip
      nbsp; 15
    snip  
       2017-11-17 10:43:43 +08:00
    写个批处理,先结束进程,再启动。最后用计划任务定时执行
    BadCat
        16
    BadCat  
    OP
       2017-11-17 10:51:14 +08:00
    start /max "" "d:\Debug\DVIComparison.exe"
    这么写启动有问题吗,为什么启动不了,只有手动双击 bat 才能启动的了,定时任务启动不了
    noe132
        17
    noe132  
       2017-11-17 10:52:09 +08:00 via Android
    定时任务用户非当前用户
    UnknownR
        18
    UnknownR  
       2017-11-17 11:42:58 +08:00
    windows 的 task scheduler 就能解决你的问题,定时重启, trigger 里填时间,也可以定义多个 trigger
    oott123
        19
    oott123  
       2017-11-17 11:50:08 +08:00 via Android
    装个 AlwaysUp 完美解决
    fy
        20
    fy  
       2017-11-17 11:55:47 +08:00
    等等,7x24 小时运行是这样的吗……
    hakim
        21
    hakim  
       2017-11-17 11:56:26 +08:00
    task scheduler 偶尔会出毛病,可能是我配置的有问题
    然后我用 Java 写了个脚本。。定时调用 bat 文件,bat 会先关闭程序,再启动程序
    sicifus
        22
    sicifus  
       2017-11-17 12:18:12 +08:00
    @BadCat #16 任务计划程序里给了最高权限吗?
    BadCat
        23
    BadCat  
    OP
       2017-11-17 12:35:05 +08:00
    @sicifus 改成本地用户就好了
    BadCat
        24
    BadCat  
    OP
       2017-11-17 12:36:49 +08:00
    我想写一个 windows server 来控制程序 重启,不知道能行吗
    time.Interval 只能给间隔时间,好像不能控制在几点啊
    jzj
        25
    jzj  
       2017-11-17 12:38:11 +08:00
    写个服务端 service 用定时器不就 O 了
    BadCat
        26
    BadCat  
    OP
       2017-11-17 12:38:17 +08:00
    @fy 不是,是程序要 7x24 小时的运行,在后台做运算,但怕承受不了压力 崩溃掉,所以打算在凌晨重启一下
    pkaq
        27
    pkaq  
       2017-11-17 12:55:24 +08:00
    找个员工 然后把他发到太平洋某个岛上 每天晚上十二点必须起来输入 4815162342
    lsido
        28
    lsido  
       2017-11-17 13:00:57 +08:00
    crontab 第一个脚本 每晚 12 点 kill 你的程序

    crontab 第二个脚本

    #!/bin/sh
    Tag=`ps -ef|grep '程序名'|grep -v grep|wc -l|awk '{printf $1"\n"}'`
    if [ $Tag = 0 ]
    then
    echo '未检测到程序,正在重启...'
    启动命令
    fi
    BadCat
        29
    BadCat  
    OP
       2017-11-17 13:16:27 +08:00
    emmmm 批处理的已经写出来了,添加到任务计划里了
    %1 start "" mshta Vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
    taskkill /im DVIComparison.exe /f
    @echo off
    echo
    ping localhost -n 10 > nul
    echo
    start /max "" "d:\Debug\DVIComparison.exe"

    现在是想写个服务来实现这个功能,不知道怎么写
    notreami
        30
    notreami  
       2017-11-17 13:18:20 +08:00
    为啥要重启呢?为啥没有集群呢?为啥没有分布式定时任务呢?
    cabing
        31
    cabing  
       2017-11-17 13:37:27 +08:00
    为啥要重启呢?
    BadCat
        32
    BadCat  
    OP
       2017-11-17 13:38:34 +08:00
    ??????
    都是只看标题进来就问 为啥要重启??
    forcecharlie
        33
    forcecharlie  
       2017-11-17 14:16:56 +08:00
    大多数语言的网络框架都有定时器,当然也可以用系统 API 或者系统调用, 比如 Boost Asio 就有 steady_timer, async_wait 等到时间到了就执行,crontab 实际上是不断的 sleep 然后唤醒后检查任务队列里面的任务,执行对应的命令。如果是服务程序,使用了网络框架完全可以使用内置的定时器区执行任务的。

    源码:
    https://github.com/systemd-cron/crontab
    860670496
        34
    860670496  
       2017-11-17 15:04:10 +08:00
    @pkaq #27 哈哈哈哈而且一定要用有那种老式翻页计时器
    CFO
        35
    CFO  
       2017-11-17 15:29:52 +08:00 via Android
    这是 7x24 小时?重启不得花好几秒吗?那么这几秒哪去了?
    续了?
    lonelygo
        36
    lonelygo  
       2017-11-17 15:47:05 +08:00
    @airyland
    好巧,我们的关注点一样。
    loveCoding
        37
    loveCoding  
       2017-11-17 15:54:37 +08:00
    设计 cron 的人真是个人才... 太灵活好用了.
    Theo14
        38
    Theo14  
       2017-11-17 16:22:26 +08:00
    考虑做成 windows 服务吧,在服务里管理,记得服务的属性里面可以设置。
    如果了解 supervisord 的话,你看下这个 https://stackoverflow.com/questions/7629813/is-there-windows-analog-to-supervisord
    BadCat
        39
    BadCat  
    OP
       2017-11-17 16:28:34 +08:00
    @Theo14 有试着做了一下,但是发现调用不了 winform 程序,而且要给定时间去调用就有些复杂 ,timer 只能设置多少 ms 延迟。没写过服务 突然上手还有一些难的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     958 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 19:43 PVG 03:43 LAX 12:43 JFK 15:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86