【问题标题】:Auto restart programs using perl script使用 perl 脚本自动重启程序
【发布时间】:2014-12-23 04:30:47
【问题描述】:

我在 Windows 2008 r2 机器上运行游戏服务器,我正在尝试设置一个自动重启脚本以每 12 小时运行一次,到目前为止,我正在使用 Windows 任务调度程序每 12 小时加载一个 Perl 脚本,该脚本连接到telnet 为了让玩家知道服务器正在重新启动,然后当脚本完成时它会关闭并且我的第二个任务调度程序运行一个 .bat 来终止打开的任务并重新启动它们,我想要做的是终止进程然后重新启动相同的进程只使用 perl 脚本,因此不需要 .bat。

所以我一直在疯狂地搜索并且空无一物,我对使用 Perl 非常陌生,所以我根据我想做的事情在谷歌中找到的东西都是使用 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 而不是进程名称结束进程。并且没有任何东西向我展示了根据其所在目录加载程序备份的正确方法。

【问题讨论】:

    标签: windows perl variables batch-file telnet


    【解决方案1】:

    我遇到了一些看起来很有希望的东西,但不确定如何调用两个不同的运行进程。有什么想法吗?

    $|++;
    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);
    

    【讨论】:

      【解决方案2】:

      现在已经使用了几个小时但没有得到答案在我使用它之前。它的作用是启动一个 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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-07
        • 2019-04-10
        • 2011-12-04
        • 1970-01-01
        • 2021-03-02
        • 2017-07-06
        • 2016-07-15
        相关资源
        最近更新 更多