我在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,而不是進程名稱。並沒有任何顯示我加載該程序的正確方式備份根據其目錄。