没有这方面的经验,请问该如何下手去写
1
Gothack 2017-11-17 09:36:26 +08:00 via iPhone
crontab
|
2
wataxiwax 2017-11-17 09:38:11 +08:00
可以看下 crontab 命令
|
4
xiaoz 2017-11-17 09:44:31 +08:00 via Android
win 任务计划
linux crontab |
5
ceyes 2017-11-17 09:48:05 +08:00
真正的问题是什么呢,为什么需要“每天 12 点重启一下”?
|
7
calming 2017-11-17 09:50:53 +08:00
你要是 spring 的话直接上 Scheduled
|
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 是执行任务的主体 |
9
airyland 2017-11-17 09:53:15 +08:00 1
楼主头像。。
|
11
fuyufjh 2017-11-17 10:00:19 +08:00
应该在醒目位置写上“ windows 环境”
|
12
Aliencn 2017-11-17 10:01:02 +08:00
一个批处理循环检测进程不存在就启动。
再加一个计划任务指定时间杀进程。 |
13
daemonghost 2017-11-17 10:26:00 +08:00
@BadCat 为什么要定时重启,而不是做成服务监控,然后再重启呢?
|
14
BadCat OP @daemonghost 不是一样吗 -.=
|
15
snip 2017-11-17 10:43:43 +08:00
写个批处理,先结束进程,再启动。最后用计划任务定时执行
|
16
BadCat OP start /max "" "d:\Debug\DVIComparison.exe"
这么写启动有问题吗,为什么启动不了,只有手动双击 bat 才能启动的了,定时任务启动不了 |
17
noe132 2017-11-17 10:52:09 +08:00 via Android
定时任务用户非当前用户
|
18
UnknownR 2017-11-17 11:42:58 +08:00
windows 的 task scheduler 就能解决你的问题,定时重启, trigger 里填时间,也可以定义多个 trigger
|
19
oott123 2017-11-17 11:50:08 +08:00 via Android
装个 AlwaysUp 完美解决
|
20
fy 2017-11-17 11:55:47 +08:00
等等,7x24 小时运行是这样的吗……
|
21
hakim 2017-11-17 11:56:26 +08:00
task scheduler 偶尔会出毛病,可能是我配置的有问题
然后我用 Java 写了个脚本。。定时调用 bat 文件,bat 会先关闭程序,再启动程序 |
24
BadCat OP 我想写一个 windows server 来控制程序 重启,不知道能行吗
time.Interval 只能给间隔时间,好像不能控制在几点啊 |
25
jzj 2017-11-17 12:38:11 +08:00
写个服务端 service 用定时器不就 O 了
|
27
pkaq 2017-11-17 12:55:24 +08:00
找个员工 然后把他发到太平洋某个岛上 每天晚上十二点必须起来输入 4815162342
|
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 |
29
BadCat OP 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" 现在是想写个服务来实现这个功能,不知道怎么写 |
30
notreami 2017-11-17 13:18:20 +08:00
为啥要重启呢?为啥没有集群呢?为啥没有分布式定时任务呢?
|
31
cabing 2017-11-17 13:37:27 +08:00
为啥要重启呢?
|
32
BadCat OP ??????
都是只看标题进来就问 为啥要重启?? |
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 |
35
CFO 2017-11-17 15:29:52 +08:00 via Android
这是 7x24 小时?重启不得花好几秒吗?那么这几秒哪去了?
续了? |
37
loveCoding 2017-11-17 15:54:37 +08:00
设计 cron 的人真是个人才... 太灵活好用了.
|
38
Theo14 2017-11-17 16:22:26 +08:00
考虑做成 windows 服务吧,在服务里管理,记得服务的属性里面可以设置。
如果了解 supervisord 的话,你看下这个 https://stackoverflow.com/questions/7629813/is-there-windows-analog-to-supervisord |