ฉันมีแอปพลิเคชันเซิร์ฟเวอร์ที่ฉันต้องการเรียกใช้เมื่อใดก็ตามที่คอมพิวเตอร์ทำงานและมักเป็นกรณีนี้ยกเว้นบางครั้งฉันจะพบว่าตัวเองปิดเอง
มีค้างคาวหรือสคริปต์ที่ฉันสามารถเรียกใช้เพื่อตรวจสอบแอปพลิเคชันและเริ่มต้นใหม่ได้หรือไม่
ฉันมีแอปพลิเคชันเซิร์ฟเวอร์ที่ฉันต้องการเรียกใช้เมื่อใดก็ตามที่คอมพิวเตอร์ทำงานและมักเป็นกรณีนี้ยกเว้นบางครั้งฉันจะพบว่าตัวเองปิดเอง
มีค้างคาวหรือสคริปต์ที่ฉันสามารถเรียกใช้เพื่อตรวจสอบแอปพลิเคชันและเริ่มต้นใหม่ได้หรือไม่
คำตอบ:
สิ่งนี้ไม่ได้ผลเสมอไป (ขึ้นอยู่กับว่าโปรแกรมโหลดตัวเองอย่างไร) แต่โดยปกติคุณสามารถสร้างไฟล์แบตช์ดังนี้:
@Echo off
:Start
NotePad
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost
goto Start
ฉันใช้ Notepad เป็นตัวอย่าง
เส้น
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost
เป็นเพียงความล่าช้า (จาก 10 วินาที) เพื่อให้ผู้ใช้มีโอกาสยกเลิกกระบวนการก่อนที่จะเริ่มขึ้นอีกครั้ง
เส้น
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log
ไม่จำเป็น แต่จะบันทึกทุกครั้งที่โปรแกรมปิดไฟล์ดังนั้นอาจเป็นประโยชน์ในการวินิจฉัยปัญหา ErrorLevel อาจบอกคุณไม่ได้มาก แต่โปรแกรมควรจะคืนค่า 0 หากปิดตามปกติและไม่ใช่ - ศูนย์ข้อความถ้ามันไม่ได้
หมายเหตุคุณระบุว่าโปรแกรมของคุณจะไม่ทำอะไรเลยหากทำงานอยู่แล้ว นั่นหมายความว่าแอปพลิเคชั่นเริ่มต้นตรวจพบว่ามีสำเนาอื่นกำลังทำงานอยู่และปิดเครื่องทันที หากเป็นกรณีนี้และโปรแกรมของคุณกำลังทำงานก่อนที่จะเริ่มไฟล์แบตช์นี้แบตช์จะวนซ้ำและพยายามเริ่มโปรแกรมของคุณทุกสิบวินาที
จากคำตอบของคุณข้างต้นสิ่งที่ฉันแนะนำคือคุณใส่คำสั่งนั้นลงในแบตช์ไฟล์จากนั้นตั้งไฟล์แบทช์นั้นให้ทำงานเป็นงานที่กำหนดเวลาไว้ทุกนาที แทบไม่มีค่าใช้จ่ายที่เกี่ยวข้องกับสิ่งนี้และช่วยให้มั่นใจได้ว่ากระบวนการของคุณจะได้รับการกล่าวถึงไม่ว่าคุณจะอยู่ใกล้หรือไม่ก็ตาม
ฉันเดาคำตอบที่ถูกต้องสำหรับคำถามนี้ขึ้นอยู่กับสาเหตุที่คุณต้องการทำ คุณพยายามแก้ปัญหาการปิดเครื่องโดยไม่ตั้งใจหรือไม่? ป้องกันการ "ปิด" ที่เป็นอันตรายโดยผู้ใช้เครื่อง (เช่นพนักงานปิดซอฟต์แวร์ตรวจสอบ) หรือไม่? ป้องกันการโจมตีที่เป็นอันตรายร้ายแรงและมีทักษะ? คุณกำลังพยายามเขียนมัลแวร์ด้วยตัวเอง (ในกรณีใดโปรดลบ ;-))?
นอกจากนี้ตามที่ผู้แสดงความคิดเห็นคนอื่นพูดถึงมันจะแตกต่างกันหากคุณเขียนบริการของ Windows (เช่น)
โดยส่วนตัวฉันอาจเริ่มด้วยการเขียนแอปพลิเคชันที่สองและเริ่มต้นด้วยวิธีเดียวกัน ให้ทั้งสองแอพพลิเคชั่นสแกนหากันเป็นระยะและรีสตาร์ทถ้าจำเป็น - ตรวจสอบให้แน่ใจว่าคุณได้เตรียมวิธีที่ง่ายสำหรับการปิดแอปพลิเคชันอย่างถูกกฎหมาย!
ที่กล่าวและให้ความคิดเห็นของคุณ "บางครั้งฉันจะพบว่ามันได้ปิดตัวเอง" ฉันจะเริ่มต้นด้วยการพยายามหาว่าทำไมมันปิด ...
คุณสามารถใช้โปรแกรมที่ชื่อว่าReStartMe 2.0 [ Mirror ] ทำสิ่งนั้นได้อย่างแม่นยำ:
มอนิเตอร์กระบวนการและรีสตาร์ทหากปิด
นี่เป็นวิธีที่ดีกว่า! นี่คือรหัสบางส่วนที่ฉันใช้กับเซิร์ฟเวอร์เกม minetest ควรได้รับการบันทึกในไฟล์. bat
@echo off
rem This is a comment line
rem This one is a comment too
rem Following line ensures the working directory is searched in C:
C:
rem Join the correct directory, where the server stuff lies in:
cd "C:\Users\morenavaj\Documents\minetest-0.4.16-win64 - Lone_Wolf\"
:love_spaghetti_code
bin\server.lnk --config minetest.conf ^
--worldname "Land of Blockheads" ^
--gameid minetest_game ^
--port 30000 ^
--logfile bin/debug.txt
echo Restarting server....
goto love_spaghetti_code
echo Done (this should never, ever, happen)