搜索
楼主: 心静如水

请问让服务器运行达5小时自动重起的代码如何写呢?

[复制链接]
发表于 2009-10-27 16:13:17 | 显示全部楼层 来自 菲律宾
刷新也可以吧,反正他的要求是不让引诱机器人的时间不能太长。。。
HLSW来重启是最好了,其他R版早点搞出来。
回复

使用道具 举报

发表于 2009-11-15 20:23:04 | 显示全部楼层 来自 中国–重庆–重庆
本帖最后由 阿龙哥哥 于 2009-11-15 20:32 编辑

是WIN的系统吗?是的话这个很简单系统自己就带,在计划任务里运行
C:\WINDOWS\system32\shutdown.exe -r -t 00
然后设置启动的时间就可以了。。

我目前都是让服务器每天启动一次,你想过几个小时启动好象要在高级设置里选者重复任务,把持续时间选为99999,印象里好象是这样设置。。
回复

使用道具 举报

发表于 2009-11-23 01:23:56 | 显示全部楼层 来自 中国–广西–南宁
WIndows自带定时计划
写个批处理然后加到定时计划里
先结束进程然后ping 127.0.0.1 3-5次再去重新开启就行了
回复

使用道具 举报

发表于 2009-11-23 02:05:54 | 显示全部楼层 来自 中国–广西–南宁
本帖最后由 lovehuai 于 2009-11-23 02:08 编辑

Ps:要放到hlds的同目录下不然就在txt里加上hlds的路径
写了个小东西来实现CMD下启动
启动参数 HlRun.exe /r 300 hlds.txt
/r 启动
300 每隔300分钟 5个小时重启
hlds.txt  hlds的启动参数可以非TXT格式




下面是源码
编辑环境 Win Xp Sp3 + Delphi7
  1. program HlRun;

  2. {$APPTYPE CONSOLE}

  3. uses
  4.   Windows,
  5.   TLhelp32;

  6. var
  7.   Msg:Tmsg;
  8.   Time:Integer;
  9.   Run:DWORD;
  10.   Temp:String;
  11.   RInc:Integer;
  12.   
  13. Function StrToInt(S: String): Integer;
  14. Var
  15. E: Integer;
  16. Begin
  17.   Val(S, Result, E);
  18. End;

  19. Function IntToStr(I: DWORD): String;
  20. begin
  21.   Str(I, Result);
  22. end;

  23. Function LowerCase(const S: string): string;
  24. var
  25.   Ch: Char;
  26.   L: Integer;
  27.   Source, Dest: PChar;
  28. begin
  29.   L := Length(S);
  30.   SetLength(Result, L);
  31.   Source := Pointer(S);
  32.   Dest := Pointer(Result);
  33.   while L <> 0 do
  34.   begin
  35.     Ch := Source^;
  36.     if (Ch >= 'A') and (Ch <= 'Z') then Inc(Ch, 32);
  37.     Dest^ := Ch;
  38.     Inc(Source);
  39.     Inc(Dest);
  40.     Dec(L);
  41.   end;
  42. end;

  43. Function Trim(const S: string): string;
  44. var
  45.   I, L: Integer;
  46. begin
  47.   L := Length(S);
  48.   I := 1;
  49.   while (I <= L) and (S[I] <= ' ') do Inc(I);
  50.   if I > L then Result := '' else
  51.   begin
  52.     while S[L] <= ' ' do Dec(L);
  53.     Result := Copy(S, I, L - I + 1);
  54.   end;
  55. end;

  56. Function GetPID(_GetPID:String):Dword;     //获取进程PID
  57. var
  58.      h:thandle;
  59.      f:boolean;
  60.      lppe:tprocessentry32;
  61. begin
  62.   Result:=0 ;
  63.      h := CreateToolhelp32Snapshot(TH32cs_SnapProcess, 0);
  64.      lppe.dwSize := sizeof(lppe);
  65.      f := Process32First(h, lppe);
  66.      while integer(f) <> 0 do
  67.      begin
  68.        if LowerCase(lppe.szExeFile) = LowerCase(_GetPID) then
  69.        begin
  70.          Result:=(lppe.th32ProcessID);
  71.          break;
  72.        end;
  73.        f := Process32Next(h, lppe);
  74.      end;
  75. end;


  76. Function KillProcess(dwPID: DWORD):Boolean;
  77. var
  78.   ProcessHandle: THandle;
  79. begin
  80.   ProcessHandle := OpenProcess(PROCESS_TERMINATE, False, dwPID);
  81.   Result:=TerminateProcess(ProcessHandle, 0);
  82. end;

  83. Function ReadTxt(FileName:String):String;
  84. Var
  85. F : Textfile;
  86. Begin
  87. AssignFile(F, FileName);
  88. Reset(F);
  89. Readln(F,Result);
  90. Closefile(F);
  91. Result:=Trim(Result);
  92. End;

  93. function Hlds():Integer; stdcall;
  94. begin
  95.      KillProcess(GetPID('hlds.exe'));
  96.      Sleep(500);
  97.      //Temp:= 'hlds.exe -game cstrike +servercfgfile MatchMode.cfg -insecure -port 27017 +maxplayers 14 +map de_train +sv_lan 0 -console +ip 192.168.1.111 -noipx -nojoy';
  98.      if  Temp <> '' then
  99.      begin
  100.             WinExec(PChar(Temp),SW_SHOW);
  101.      end;
  102.      Inc(RInc);
  103.      Writeln('当前启动次数:' + IntToStr(RInc));
  104.      Result := 0;
  105. end;

  106. procedure TimerProc(hwnd:HWND;uMsg,idEvent:UINT;dwTime:DWORD); stdcall;
  107. begin
  108.     CreateThread(nil , 0, @Hlds, nil, 0, Run);
  109. end;

  110. begin
  111.   if ParamStr(1) = '/r' then
  112.   begin
  113.    Time:=StrToInt(ParamStr(2));
  114.    Writeln('重启间隔:' + ParamStr(2) + ' 分钟');
  115.    Temp:=ReadTxt(ParamStr(3));
  116.    Writeln('启动参数:' + Temp);
  117.    RInc:=0;
  118.    Hlds;
  119.    Sleep(100);
  120.    SetTimer(0,100001,(Time * 60 *1000),@TimerProc);
  121.    while GetMessage(Msg,0,0,0) do
  122.    begin
  123.       TranslateMessage(Msg);
  124.       DispatchMessage(Msg);
  125.    end;
  126.   end;  

  127. end.
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注个册吧

×
回复

使用道具 举报

 楼主| 发表于 2009-11-23 22:15:11 | 显示全部楼层 来自 中国–广西–百色–右江区
谢谢.....................
回复

使用道具 举报

发表于 2009-11-24 08:18:11 | 显示全部楼层 来自 中国–广东–广州
我怎么感觉现在点通为一可学东西只有这个区的啦..晕呀
回复

使用道具 举报

发表于 2009-11-25 12:46:31 | 显示全部楼层 来自 中国–福建–泉州
哈哈!!!!!!
回复

使用道具 举报

发表于 2009-12-3 12:28:55 | 显示全部楼层 来自 中国–吉林–吉林市–磐石市
好帖子{:3_64:}
回复

使用道具 举报

发表于 2009-12-3 16:52:13 | 显示全部楼层 来自 中国–四川–德阳–广汉市
高手就是高手
回复

使用道具 举报

发表于 2010-1-14 05:27:27 | 显示全部楼层 来自 中国–河南–商丘
也可以利用一下系统自带的计划任务。。~~~~
直接把机器重启...重启后HLSM会自动运行并再启动CS端...
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表