2014-10-27 3 views
0

Я запускаю игровой сервер на машине Windows 2008 r2, и я пытаюсь настроить скрипт автоматического перезапуска, который будет запускаться каждые 12 часов. До сих пор я использую планировщик задач Windows для загрузки сценария Perl каждые 12 часов, которые подключаются к telnet, чтобы игроки знали, что сервер перезагружается, а затем, когда скрипт завершен, он закрывается, а мой второй планировщик задач запускает .bat, чтобы убивать открытые задачи и перезапускает их. Что я хочу сделать запустите процесс, а затем перезапустите те же процессы, используя только скрипт perl, чтобы байт не понадобился.Программы автоматического перезапуска с использованием perl-скрипта

Таким образом, я был взломан как сумасшедший, и я стал пустым, я очень новичок в использовании Perl, поэтому все, что я нашел в google, основано на том, что я хочу сделать, - все используют PID, чтобы убить запущенную задачу. Я сделал тест с открытием и закрытием сохраненного файла txt, чтобы увидеть, изменяется ли идентификатор процесса каждый раз, когда он открывается, и похоже, что это так. Поэтому использование 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; 

Если кто-нибудь может получить меня началась в правильном направлении, это означало бы, много, я проверил систему и несколько других вещей, но независимо от того, что я считаю, это всегда показывает окончание процесса ПИД-регулятора, а не Имя процесса. и ничто не показало мне правильный способ загрузки резервной копии программы на основе ее каталога.

ответ

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», The следующие несколько частей, где я больше всего смущен.

Вторая часть должна закрыть серверы 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; 
Смежные вопросы