2014-10-27 68 views
0

我在Windows 2008 R2計算機上運行遊戲服務器,並試圖設置一個自動重啓腳本,每12小時運行一次,到目前爲止,我正在使用Windows任務計劃程序來加載Perl腳本每12小時連接一次telnet以讓玩家知道服務器正在重新啓動,然後腳本完成後關閉,第二個任務計劃程序運行.bat殺死打開的任務並重新啓動它們,我想要做的是殺死進程,然後使用perl腳本重新啓動相同的進程,因此不需要.bat。使用Perl腳本自動重啓程序

因此,我一直在瘋狂Google搜索,並且空洞起來,我非常習慣於使用Perl,所以我在google中發現的基於我想要做的事情都是使用PID來殺死正在運行的任務。我做了一個測試,打開和關閉一個保存的txt文件,看看進程ID是否每次打開時都會改變,看起來確實如此。因此,除非有解決方法,否則使用PID將無法正常工作。

這裏是Telnet連接,如果任何人都可以幫助我清理這個,所以沒有太多的打印和可能調用變量,而不是它使這一點更簡單,這將有所幫助。

$hostname = "IP_HERE"; 

use Net::Telnet(); 
    $t = new Net::Telnet (Timeout => 60, 
          Prompt => '/bash\$ $/'); 
    $t->open(Host => $hostname, 
       Port => PORT_HERE); 
    $t->waitfor('/Please enter password/');    
    $t->print("PASSWORD_HERE"); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]3 MINUTES[FFFFFF] !!!\" "); 
    sleep(60); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]2 MINUTES[FFFFFF] !!!\" "); 
    sleep(60); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]1 MINUTE[FFFFFF] !!!\" "); 
    sleep(45); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]15 SECONDS[FFFFFF] !!!\" "); 
    sleep(15); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]5\" "); 
    sleep(1); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]4\" "); 
    sleep(1); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]3\" "); 
    sleep(1); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]2\" "); 
    sleep(1); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]1\" "); 
    sleep(1); 
    $t->print("sa"); 
    sleep(3); 
    $t->print("shutdown"); 
    sleep(3); 
exit; 

如果任何人都可以幫我在正確的方向開始這將意味着很多,我已簽出系統和一些其他的東西,但不管是什麼,我覺得它總是顯示終止一個進程的PID,而不是進程名稱。並沒有任何顯示我加載該程序的正確方式備份根據其目錄。

回答

0

我遇到了一些看起來很有前途但不知道如何調用兩個不同的正在運行的進程。有什麼想法嗎?

$|++; 
system("WMIC /OUTPUT:C:\\log.txt path win32_process get Processid,Commandline"); 
$infile1="C:/log.txt"; 
open(IN1,"<:encoding(UTF-16LE)","$infile1"); 
$profilename="ts3client_win64.exe"; 
while(<IN1>) 
{ 
      next if (/^(\s)*$/); 
      s/(\s)+$//g; 
      if (/$profilename/) 
      { 
      print "$1\n" if (m/(\d+)$/); 
      system("taskkill /F /PID $1"); 
      } 
} 
close(IN1); 
0

已經有這方面的工作了幾個小時,現在並沒有得到一個答案,我還沒有測試下面的代碼,所以不知道這是否會成功,但是我我在這裏張貼,看是否有人對此有任何輸入和如果在我使用它之前看起來是正確的。它所做的是啓動telnet連接,然後向在線玩家發送消息,讓他們知道服務器正在重新啓動,然後使用命令「sa」保存服務器信息,然後使用「shutdown」命令關閉服務器。接下來的幾個部分是我最困惑的地方。

第二部分它應該關閉服務器EXE和管理器EXE,然後開始從目錄中刪除文件,然後重新加載管理器和服務器。這是我迄今爲止請留下一些反饋,並讓我知道,如果這是正確的,或者是否有一個更簡單的方法來做到這一點。

$hostname = "SERVER_IP_HERE"; 
use Net::Telnet(); 
    $t = new Net::Telnet (Timeout => 60, 
          Prompt => '/bash\$ $/'); 
    $t->open(Host => $hostname, 
       Port => SERVER_PORT_HERE); 
    $t->waitfor('/Please enter password/');    
    $t->print("SERVER_PASSWORD_HERE"); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]3 MINUTES[FFFFFF] !!!\" "); 
    sleep(60); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]2 MINUTES[FFFFFF] !!!\" "); 
    sleep(60); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]1 MINUTE[FFFFFF] !!!\" "); 
    sleep(45); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]15 SECONDS[FFFFFF] !!!\" "); 
    sleep(10); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]5\" "); 
    sleep(1); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]4\" "); 
    sleep(1); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]3\" "); 
    sleep(1); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]2\" "); 
    sleep(1); 
    $t->print("say \"[FF0000]WARNING! [FF0000]SERVER WILL RESTART IN [FF0000]1\" "); 
    sleep(1); 
    $t->print("sa"); 
    sleep(2); 
    $t->print("shutdown"); 
    sleep(3); 
$|++; 
system("WMIC /OUTPUT:C:\\log.txt path win32_process get Processid,Commandline"); 
$infile1="C:/log.txt"; 
open(IN1,"<:encoding(UTF-16LE)","$infile1"); 
$server="SERVERS.exe"; 
$servermanager="SERVERMANAGERS.EXE"; 
while(<IN1>) 
{ 
      next if (/^(\s)*$/); 
      s/(\s)+$//g; 
      if (/$server/) 
      { 
      print "$1\n" if (m/(\d+)$/); 
      system("taskkill /F /PID $1"); 
      } 
      if (/$servermanager/) 
      { 
      print "$1\n" if (m/(\d+)$/); 
      system("taskkill /F /PID $1"); 
      } 
} 
close(IN1); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-1.0.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.0.0.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.0.-5.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.1.-5.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-4.-9.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-4.-10.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-3.-9.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-3.-10.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.7.-4.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.7.-5.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.14.-14.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.14.-13.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.38.-9.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.39.-9.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-10.3.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-9.3.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-10.2.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-9.2.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-21.1.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-21.0.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-22.1.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-22.0.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.17.-2.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.16.-2.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.16.-1.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.10.7.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.9.7.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.8.7.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.10.8.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.9.8.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.8.8.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-11.10.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-10.10.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-11.9.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-10.9.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.1.17.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-4.19.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-3.19.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.12.24.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.11.24.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.12.23.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-22.18.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-21.18.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-22.17.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-21.17.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-21.16.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-17.29.7rg」); 
sleep(1); 
unlink (「D:\\FULL\\PATH\\TO\\FILE\\r.-17.28.7rg」); 
sleep(1); 
system("c:\\FULL\\PATH\\TO\\PROGRAM\\.EXE"); 
exit;