中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于时间段控制服务的困惑~~谢谢高手指点
« [1] [2] [3] »
作者:
标题: 关于时间段控制服务的困惑~~谢谢高手指点 上一主题 | 下一主题
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 31 楼』:  

是有问题的;如果开启多个服务;应该加括号;
29楼已经改了;

2007-4-27 09:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
boyhong
初级用户





积分 32
发帖 15
注册 2007-4-26
状态 离线
『第 32 楼』:  

现在按照您的意思是:

@echo off
:continue
      set /a at=%time:~0,2%,1/(at/8),1/(16/at)&&(net start 服务1 & net start 服务2 & net start 服务3)||(net stop 服务1 &  net stop 服务2  & net stop 服务3)
      ping -n 300 127.1>nul
goto continue

然后做成服务:

sc create 服务名 binPath= 路径  [选项1] [选项2]

功能上已经OK了~~
在资源占用上,刚才看到sleep.exe也可延时,在试,现在试图寻找一种占得最小的东东~~
试验中....

2007-4-27 10:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 33 楼』:  

用vbscript来延时可以动态计算,这样不是更方便
首先确定两个阀值8&17,然后生成sleep的等待时间为当前时间到阀值的差

2007-4-27 12:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 34 楼』:  

to everest79:

前面已经用vbscript做过了;

后来做成服务后;太占资源;才淘汰这种方法的;

2007-4-27 22:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 35 楼』:  

光只是宿主挂在后台,只占4M内存

2007-4-28 01:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 36 楼』:  

我也觉得奇怪;
但是那样运行后;我的cpu就会因为 cscript 彪到 50% 以上;
也不大清楚原因

2007-4-28 01:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 37 楼』:  

你把延时开得太快了。

wscript.sleep 6000
在实际测试中,只占用了3秒的时间。

我给的延时,在实际计算中,只有30秒的延时。。

这些都是通过计算了的。。

并不是胡乱给的延时结果。

而且在他的应用中,30秒并没有什么关系。。
就是一分钟也在他的接受范围内。



知,不觉多。不知,乃求知
2007-4-28 03:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 38 楼』:  

难怪呢;

这样解释就合理了;

不过wscript.sleep不是以秒来计算的吗?'

怎么6000会只占3秒?;

2007-4-28 05:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 39 楼』:  

是以毫秒计算的1/1000秒

2007-4-28 05:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 40 楼』:  

嗯。按道理来说是 1/1000的。。

但我通过

:redelay
      echo %time%
      cscript /nologo delay
goto :redelay
最后得出的结果就是一半。。。

我也不知道为什么?



知,不觉多。不知,乃求知
2007-4-28 05:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 41 楼』:  

好久没用vbs了;
连sleep是毫秒都忘了;
汗...

2007-4-28 09:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
boyhong
初级用户





积分 32
发帖 15
注册 2007-4-26
状态 离线
『第 42 楼』:  

我暂时是这样做的:
写了两个批处理
一个启的。
一个停的。
然后在计划任务里。。

关于用vbscript来延时,正在试,好像不止占内存,CPU也不行,先观望一下。个人正在测试这些

谢谢各位,有更好的方法请UP啦

2007-4-28 20:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 43 楼』:  

前面已经说了 vbs 延时 造成占内存cpu资源;是因为延时过快;
用先前flyinspace兄给你的数值60000就好了;

如果你打算用了计划任务;还用这么费事啊;早搞定了;连延时都不用;
资源耗费为0;

@echo off
schtasks /create /tn "START" /tr net start service /sc daily /st 08:00:00
schtasks /create /tn "STOP" /tr net stop service /sc daily /st 17:00:00

双击一次搞定..

2007-4-28 22:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 44 楼』:  给一段 VBS 的脚本。

'************************************************************
' 第一次写 vbs 。写得不好,还请高手指点。。
' 使用时,把StopServerName = 后面的名称替换自己需要的名称就行了。
' 脚本误差 +/- 一分钟。
' 而且也解决了内存占用问题。4M 内存应该影响不大吧?
'************************************************************
Dim NHour,NMin,SleepTime
Dim RunState
strComputer = "."
Const StopServerName = "Dnscache"
Do
        Nhour                = Hour(Now)
        Nmin                = Minute(Now)
        SleepTime        = ( 60 - NMin ) * 60 * 1000
        if Nhour > 8 and Nhour < 17 Then
                RunState = SetServerState(StopServerName,"Running")
        Else
                RunState = SetServerState(StopServerName,"Stopped")
        End If
        ‘WScript.Echo "" & SleepTime
        WScript.Sleep SleepTime
Loop
        Function SetServerState(SName,State)
                Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
                Set colItems = objWMIService.ExecQuery("Select * from Win32_Service",,48)
                For Each Item in colItems
                        If Item.Name = Sname And Item.State = "Running" Then
                                If Item.State <> State Then
                                        Item.StopService()
                                End if
                        ElseIf Item.Name = Sname And Item.State = "Stopped" Then
                                If Item.State <> State Then
                                        Item.StartService()
                                End if
                        End if
                               
                Next
        End Function

[ Last edited by flyinspace on 2007-4-28 at 11:39 AM ]

   此帖被 +12 点积分      点击查看详情   
评分人:【 bjsh 分数: +12  时间:2007-4-29 00:32




知,不觉多。不知,乃求知
2007-4-29 00:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: