• 请不要在回答技术问题时复制粘贴 AI 生成的内容
BadCat
V2EX  ›  程序员

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

  •  
  •   BadCat · Nov 17, 2017 · 8690 views
    This topic created in 3280 days ago, the information mentioned may be changed or developed.

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

    39 replies  •  2017-11-17 16:28:34 +08:00
    kalsir
    kalsir
    Nov 17, 2017 via iPhone
    1
    crontab
    wataxiwax
    wataxiwax
    Nov 17, 2017
    2
    可以看下 crontab 命令
    BadCat
    BadCat
    OP
    Nov 17, 2017
    3
    @Gothack 是用 win 系统自带的那个任务计划吗?
    @wataxiwax 是用 win 系统自带的那个任务计划吗?
    xiaoz
    xiaoz
    Nov 17, 2017 via Android
    4
    win 任务计划
    linux crontab
    ceyes
    ceyes
    Nov 17, 2017
    5
    真正的问题是什么呢,为什么需要“每天 12 点重启一下”?
    BadCat
    BadCat
    OP
    Nov 17, 2017
    6
    @xiaoz 好的,多谢
    calming
    calming
    Nov 17, 2017
    7
    你要是 spring 的话直接上 Scheduled
    mYYnSmiTEQWcCwAr
    mYYnSmiTEQWcCwAr
    Nov 17, 2017 via Android
    8
    定时任务即可。。。准备两个 exe,定时启动 a.exe
    a.exe 先调用 taskkill /f /im b.exe 强制结束 b.exe ,然后启动 b.exe
    b.exe 是执行任务的主体
    airyland
    airyland
    Nov 17, 2017❤️1
    9
    楼主头像。。
    BadCat
    BadCat
    OP
    Nov 17, 2017
    10
    @calming 我是 winform 程序。。
    @cy97cool 试试你这个,我用定时计划好像不管用
    fuyufjh
    fuyufjh
    Nov 17, 2017
    11
    应该在醒目位置写上“ windows 环境”
    Aliencn
    Aliencn
    Nov 17, 2017
    12
    一个批处理循环检测进程不存在就启动。
    再加一个计划任务指定时间杀进程。
    daemonghost
    daemonghost
    Nov 17, 2017
    13
    @BadCat 为什么要定时重启,而不是做成服务监控,然后再重启呢?
    BadCat
    BadCat
    OP
    Nov 17, 2017
    14
    @daemonghost 不是一样吗 -.=
    snip
    snip
    Nov 17, 2017
    15
    写个批处理,先结束进程,再启动。最后用计划任务定时执行
    BadCat
    BadCat
    OP
    Nov 17, 2017
    16
    start /max "" "d:\Debug\DVIComparison.exe"
    这么写启动有问题吗,为什么启动不了,只有手动双击 bat 才能启动的了,定时任务启动不了
    noe132
    noe132
    Nov 17, 2017 via Android
    17
    定时任务用户非当前用户
    UnknownR
    UnknownR
    Nov 17, 2017
    18
    windows 的 task scheduler 就能解决你的问题,定时重启, trigger 里填时间,也可以定义多个 trigger
    oott123
    oott123
    Nov 17, 2017 via Android
    19
    装个 AlwaysUp 完美解决
    fy
    fy
    Nov 17, 2017
    20
    等等,7x24 小时运行是这样的吗……
    hakim
    hakim
    Nov 17, 2017
    21
    task scheduler 偶尔会出毛病,可能是我配置的有问题
    然后我用 Java 写了个脚本。。定时调用 bat 文件,bat 会先关闭程序,再启动程序
    sicifus
    sicifus
    Nov 17, 2017
    22
    @BadCat #16 任务计划程序里给了最高权限吗?
    BadCat
    BadCat
    OP
    Nov 17, 2017
    23
    @sicifus 改成本地用户就好了
    BadCat
    BadCat
    OP
    Nov 17, 2017
    24
    我想写一个 windows server 来控制程序 重启,不知道能行吗
    time.Interval 只能给间隔时间,好像不能控制在几点啊
    jzj
    jzj
    Nov 17, 2017
    25
    写个服务端 service 用定时器不就 O 了
    BadCat
    BadCat
    OP
    Nov 17, 2017
    26
    @fy 不是,是程序要 7x24 小时的运行,在后台做运算,但怕承受不了压力 崩溃掉,所以打算在凌晨重启一下
    pkaq
    pkaq
    Nov 17, 2017
    27
    找个员工 然后把他发到太平洋某个岛上 每天晚上十二点必须起来输入 4815162342
    lsido
    lsido
    Nov 17, 2017
    28
    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
    BadCat
    OP
    Nov 17, 2017
    29
    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
    notreami
    Nov 17, 2017
    30
    为啥要重启呢?为啥没有集群呢?为啥没有分布式定时任务呢?
    cabing
    cabing
    Nov 17, 2017
    31
    为啥要重启呢?
    BadCat
    BadCat
    OP
    Nov 17, 2017
    32
    ??????
    都是只看标题进来就问 为啥要重启??
    forcecharlie
    forcecharlie
    Nov 17, 2017
    33
    大多数语言的网络框架都有定时器,当然也可以用系统 API 或者系统调用, 比如 Boost Asio 就有 steady_timer, async_wait 等到时间到了就执行,crontab 实际上是不断的 sleep 然后唤醒后检查任务队列里面的任务,执行对应的命令。如果是服务程序,使用了网络框架完全可以使用内置的定时器区执行任务的。

    源码:
    https://github.com/systemd-cron/crontab
    860670496
    860670496
    Nov 17, 2017
    34
    @pkaq #27 哈哈哈哈而且一定要用有那种老式翻页计时器
    CFO
    CFO
    Nov 17, 2017 via Android
    35
    这是 7x24 小时?重启不得花好几秒吗?那么这几秒哪去了?
    续了?
    lonelygo
    lonelygo
    Nov 17, 2017
    36
    @airyland
    好巧,我们的关注点一样。
    loveCoding
    loveCoding
    Nov 17, 2017
    37
    设计 cron 的人真是个人才... 太灵活好用了.
    Theo14
    Theo14
    Nov 17, 2017
    38
    考虑做成 windows 服务吧,在服务里管理,记得服务的属性里面可以设置。
    如果了解 supervisord 的话,你看下这个 https://stackoverflow.com/questions/7629813/is-there-windows-analog-to-supervisord
    BadCat
    BadCat
    OP
    Nov 17, 2017
    39
    @Theo14 有试着做了一下,但是发现调用不了 winform 程序,而且要给定时间去调用就有些复杂 ,timer 只能设置多少 ms 延迟。没写过服务 突然上手还有一些难的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   918 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 20:38 · PVG 04:38 · LAX 12:38 · JFK 15:38
    ♥ Do have faith in what you're doing.