รีสตาร์ทแอปพลิเคชันโดยอัตโนมัติเมื่อปิด


10

ฉันมีแอปพลิเคชันเซิร์ฟเวอร์ที่ฉันต้องการเรียกใช้เมื่อใดก็ตามที่คอมพิวเตอร์ทำงานและมักเป็นกรณีนี้ยกเว้นบางครั้งฉันจะพบว่าตัวเองปิดเอง

มีค้างคาวหรือสคริปต์ที่ฉันสามารถเรียกใช้เพื่อตรวจสอบแอปพลิเคชันและเริ่มต้นใหม่ได้หรือไม่


แอปพลิเคชั่นประเภทใดและเริ่มขึ้นปกติได้อย่างไร เป็นบริการในรีจิสทรีเป็นคำสั่งเรียกใช้หรือในโฟลเดอร์เริ่มต้นหรือไม่
KCotreau

คำสั่งเรียกใช้รีจิสทรี ด้วยตัวเลือก '-start'
ซิด

จะเกิดอะไรขึ้นหากคุณเรียกใช้คำสั่งนั้นอีกครั้งโดยที่แอพกำลังทำงานอยู่
KCotreau

ไม่มีอะไร คำสั่งรับรู้ว่าแอปพลิเคชันทำงานอยู่แล้ว
ซิด

คำตอบ:


12

สิ่งนี้ไม่ได้ผลเสมอไป (ขึ้นอยู่กับว่าโปรแกรมโหลดตัวเองอย่างไร) แต่โดยปกติคุณสามารถสร้างไฟล์แบตช์ดังนี้:

@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 หากปิดตามปกติและไม่ใช่ - ศูนย์ข้อความถ้ามันไม่ได้

หมายเหตุคุณระบุว่าโปรแกรมของคุณจะไม่ทำอะไรเลยหากทำงานอยู่แล้ว นั่นหมายความว่าแอปพลิเคชั่นเริ่มต้นตรวจพบว่ามีสำเนาอื่นกำลังทำงานอยู่และปิดเครื่องทันที หากเป็นกรณีนี้และโปรแกรมของคุณกำลังทำงานก่อนที่จะเริ่มไฟล์แบตช์นี้แบตช์จะวนซ้ำและพยายามเริ่มโปรแกรมของคุณทุกสิบวินาที


"จากนั้นแบตช์จะวนซ้ำและพยายามเริ่มโปรแกรมของคุณทุกสิบวินาที" นี่เป็นสิ่งที่ไม่ดีหรือไม่?
posfan12

ขอบคุณ !! คัดลอกและวางเล็กน้อยเวลา 12:52 น. และฉันสามารถไปนอนได้โดยไม่ต้องกังวลมากเกินไปเกี่ยวกับสิ่งที่ฉันจะหา (หรือไม่พบ) ในตอนเช้า เอ่อ ในตอนเช้าหลังนอนหลับ
Spike0xff

2

จากคำตอบของคุณข้างต้นสิ่งที่ฉันแนะนำคือคุณใส่คำสั่งนั้นลงในแบตช์ไฟล์จากนั้นตั้งไฟล์แบทช์นั้นให้ทำงานเป็นงานที่กำหนดเวลาไว้ทุกนาที แทบไม่มีค่าใช้จ่ายที่เกี่ยวข้องกับสิ่งนี้และช่วยให้มั่นใจได้ว่ากระบวนการของคุณจะได้รับการกล่าวถึงไม่ว่าคุณจะอยู่ใกล้หรือไม่ก็ตาม


สิ่งนี้ทำให้ฉันเป็นวิธีแก้ปัญหาที่ค่อนข้างงุ่มง่ามและไม่มีประสิทธิภาพแม้ว่าจะรวดเร็ว อาจจะมีวิธีการที่เหมาะสมกว่าไปสู่จุดจบเดียวกันหรือไม่? ขอบคุณสำหรับความช่วยเหลือของคุณ!!!
ซิด

ซิดอย่างที่ฉันพูดค่าโสหุ้ยนั้นน้อยมากและมันง่ายที่จะทำ หากคุณต้องการหาวิธีเขียนโค้ดบางอย่างเพื่อตรวจสอบว่ามันกำลังทำงานอยู่หรือไม่และเริ่มใหม่อีกครั้งรู้สึกฟรี แต่ฉันได้ทำสิ่งนี้มาเป็นเวลานานโดยมีผลลัพธ์เชิงบวก เป็นวิธีการทั่วไปที่ใช้เมื่อคุณมีแอปพลิเคชันซึ่งโดยปกติจะอยู่บนเซิร์ฟเวอร์ที่หยุดทำงาน
KCotreau

โดยวิธีที่ง่ายที่สุด และไม่มีค่าใช้จ่าย
surfasb

2

ฉันเดาคำตอบที่ถูกต้องสำหรับคำถามนี้ขึ้นอยู่กับสาเหตุที่คุณต้องการทำ คุณพยายามแก้ปัญหาการปิดเครื่องโดยไม่ตั้งใจหรือไม่? ป้องกันการ "ปิด" ที่เป็นอันตรายโดยผู้ใช้เครื่อง (เช่นพนักงานปิดซอฟต์แวร์ตรวจสอบ) หรือไม่? ป้องกันการโจมตีที่เป็นอันตรายร้ายแรงและมีทักษะ? คุณกำลังพยายามเขียนมัลแวร์ด้วยตัวเอง (ในกรณีใดโปรดลบ ;-))?

นอกจากนี้ตามที่ผู้แสดงความคิดเห็นคนอื่นพูดถึงมันจะแตกต่างกันหากคุณเขียนบริการของ Windows (เช่น)

โดยส่วนตัวฉันอาจเริ่มด้วยการเขียนแอปพลิเคชันที่สองและเริ่มต้นด้วยวิธีเดียวกัน ให้ทั้งสองแอพพลิเคชั่นสแกนหากันเป็นระยะและรีสตาร์ทถ้าจำเป็น - ตรวจสอบให้แน่ใจว่าคุณได้เตรียมวิธีที่ง่ายสำหรับการปิดแอปพลิเคชันอย่างถูกกฎหมาย!

ที่กล่าวและให้ความคิดเห็นของคุณ "บางครั้งฉันจะพบว่ามันได้ปิดตัวเอง" ฉันจะเริ่มต้นด้วยการพยายามหาว่าทำไมมันปิด ...


ฉันใช้คอมพิวเตอร์เป็นเซิร์ฟเวอร์สื่อและแอปพลิเคชันที่ละเมิดเป็น mediaserver.exe ไม่มีอะไรที่เป็นอันตรายเกี่ยวกับมัน ฉันไม่สามารถคาดการณ์สถานการณ์ใด ๆ ที่ฉันต้องการให้ปิดแอปพลิเคชันได้ แต่ถ้าฉันต้องการจะไม่มีเหตุผลที่ฉันไม่สามารถหยุดสคริปต์หรือค้างคาวก่อนได้ นอกจากนี้ฉันไม่สามารถเขียนซอฟต์แวร์ได้ แต่คุ้นเคยกับไฟล์แบ็ต เช่นฉันเป็น noob
ซิด

ขอโทษ - นั่นจะเป็นฉันคิดว่าฉันอยู่ในกลุ่ม "โปรแกรมเมอร์" และที่คุณต้องการเขียนแอปด้วยตัวคุณเอง :-) ซุ่มซ่ามเพราะฟังดูเหมือนฉันจะแนะนำวิธีการ "จัดตารางงาน" ที่อธิบายโดย @KCotreau
Steve Mallam

2

คุณสามารถใช้โปรแกรมที่ชื่อว่าReStartMe 2.0 [ Mirror ] ทำสิ่งนั้นได้อย่างแม่นยำ:

มอนิเตอร์กระบวนการและรีสตาร์ทหากปิด


-1

นี่เป็นวิธีที่ดีกว่า! นี่คือรหัสบางส่วนที่ฉันใช้กับเซิร์ฟเวอร์เกม 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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.