Tự động khởi động lại ứng dụng khi đóng


10

Tôi có một ứng dụng máy chủ mà tôi muốn chạy bất cứ khi nào máy tính đang chạy và thường thì đây là trường hợp, ngoại trừ đôi khi tôi sẽ thấy nó tự đóng.

Có một con dơi hay tập lệnh nào tôi có thể chạy để theo dõi ứng dụng và khởi động lại nó không?


Loại ứng dụng nào, và nó thường bắt đầu như thế nào? Là một dịch vụ, trong sổ đăng ký như một lệnh chạy, hoặc trong thư mục khởi động?
KCotreau

Đăng ký chạy lệnh. với tùy chọn 'bắt đầu'.
Sid

Điều gì hiện đang xảy ra nếu bạn chạy lại lệnh đó với ứng dụng đã chạy?
KCotreau

không có gì. Lệnh nhận ra rằng ứng dụng đã chạy.
Sid

Câu trả lời:


12

Điều này không phải lúc nào cũng hoạt động (nó phụ thuộc vào cách chương trình tự tải), nhưng thông thường bạn có thể tạo một tệp bó như thế này:

@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

Tôi đã sử dụng Notepad làm ví dụ.

Những dòng kẻ

echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

chỉ là một sự chậm trễ (10 giây) để cung cấp cho người dùng cơ hội hủy bỏ quá trình trước khi nó bắt đầu lại.

Dòng

echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 

là không cần thiết, nhưng sẽ đăng nhập mỗi khi chương trình được đóng vào một tệp, vì vậy có thể hữu ích để chẩn đoán sự cố ErrorLevel có thể không cho bạn biết nhiều, nhưng một chương trình được cho là trả về 0 nếu nó đóng bình thường và không -zero tin nhắn nếu nó không

Lưu ý, Bạn đề cập rằng chương trình của bạn không làm gì nếu đã chạy. Điều đó thường có nghĩa là ứng dụng khởi động, phát hiện một bản sao khác đang chạy và tắt ngay lập tức. Nếu đó là trường hợp và chương trình của bạn đang chạy trước khi bạn bắt đầu tệp bó này, thì lô sẽ lặp vòng và cố gắng khởi động chương trình của bạn cứ sau mười giây.


"sau đó lô sẽ lặp vòng và cố gắng bắt đầu chương trình của bạn cứ sau mười giây." đây là một điều xấu?
posfan12

cảm ơn!! Một bản sao nhỏ và dán vào lúc 12:51 sáng và tôi có thể đi ngủ mà không (quá nhiều) lo lắng về những gì tôi sẽ tìm thấy (hoặc không tìm thấy) vào buổi sáng. Ừm vào buổi sáng sau giấc ngủ.
Spike0xff

2

Dựa trên các câu trả lời của bạn ở trên, điều tôi đề nghị là bạn đặt lệnh đó vào một tệp bó, sau đó đặt tệp bó đó để chạy như một tác vụ theo lịch trình mỗi phút. Hầu như không có chi phí liên quan đến việc này và nó đảm bảo rằng quy trình của bạn được nêu rõ bất kể bạn có ở quanh để nhận ra rằng nó đã dừng lại hay không.


Điều này đánh tôi là một giải pháp khá vụng về và không hiệu quả, mặc dù nhanh chóng. Có lẽ có một phương tiện thích hợp hơn cho cùng một kết thúc? Cảm ơn bạn đã giúp đỡ!!!
Sid

Sid, như tôi đã nói, chi phí rất nhỏ, và thật dễ dàng để làm. Nếu bạn muốn tìm cách mã hóa một cái gì đó để kiểm tra xem nó có đang chạy hay không, và sau đó khởi động lại nó, hãy thoải mái, nhưng tôi đã làm điều này trong một thời gian dài với kết quả tích cực. Đây là một phương pháp phổ biến được sử dụng khi bạn có các ứng dụng, thường là trên máy chủ, ngừng chạy.
KCotreau

Cho đến nay phương pháp dễ nhất. Và không có chi phí.
Surfasb

2

Tôi đoán câu trả lời đúng cho câu hỏi này phụ thuộc vào lý do tại sao bạn muốn làm điều đó. Bạn đang cố gắng giải quyết tắt máy vô tình? Ngăn chặn tình cờ tắt "độc hại" bởi người dùng máy (ví dụ: nhân viên đóng phần mềm giám sát)? Ngăn chặn cuộc tấn công độc hại nghiêm trọng và lành nghề? Bạn đang cố gắng tự viết phần mềm độc hại (trong trường hợp nào xin vui lòng tắt ;-))?

Ngoài ra, như các nhà bình luận khác đã đề cập, sẽ khác nếu bạn viết một dịch vụ Windows (ví dụ)

Cá nhân, tôi có thể bắt đầu bằng cách viết một ứng dụng thứ hai và bắt đầu nó theo cùng một cách. Có cả hai ứng dụng quét cho nhau theo định kỳ và khởi động lại nếu cần - đảm bảo rằng bạn cung cấp một cách dễ dàng để ứng dụng được đóng hợp pháp mặc dù!

Điều đó nói và đưa ra nhận xét của bạn "đôi khi tôi sẽ thấy nó tự đóng lại" Tôi sẽ THỰC SỰ bắt đầu bằng cách cố gắng tìm hiểu tại sao nó đóng cửa ...


Tôi sử dụng máy tính làm máy chủ phương tiện và ứng dụng vi phạm là mediaserver.exe. Không có gì độc hại về nó. Tôi không thể thấy trước bất kỳ kịch bản nào mà tôi muốn ứng dụng đóng, nhưng nếu tôi làm vậy, sẽ không có lý do gì tôi không thể dừng kịch bản hoặc dơi trước. Ngoài ra, tôi không có khả năng viết phần mềm, nhưng quen thuộc với các tập tin bat. tức là tôi là một người mới
Sid

Lời xin lỗi - đó là tôi nghĩ rằng tôi đã ở trong nhóm "Lập trình viên" và bạn sẽ tự viết ứng dụng :-) Vụng về vì nghe có vẻ tôi đề xuất cách tiếp cận "nhiệm vụ theo lịch trình" được mô tả bởi @KCotreau
Steve Mallam

2

Bạn có thể sử dụng một chương trình có tên ReStartMe 2.0 [ Mirror ] thực hiện chính xác điều đó:

Màn hình cho các quy trình và khởi động lại chúng nếu chúng đóng.


-1

đây là cách tốt hơn đây là một số mã tôi đã sử dụng cho một máy chủ trò chơi nhỏ nhất nên được lưu trên tệp .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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.