Automatycznie uruchom ponownie aplikację po zamknięciu

10

Mam aplikację serwera, którą chcę uruchamiać za każdym razem, gdy komputer jest uruchomiony, i zwykle tak jest, z tym wyjątkiem, że czasami okaże się, że sam się zamknął.

Czy jest jakiś nietoperz lub skrypt, który mogę uruchomić, aby monitorować aplikację i uruchomić ją ponownie, aby ją zamknąć?

Sid
źródło
Jaki typ aplikacji i jak zwykle się uruchamia? Jako usługa, w rejestrze jako polecenie uruchomienia lub w folderze startowym?
KCotreau,
Komenda uruchamiania rejestru. z opcją „-start”.
Sid
Co się stanie, jeśli ponownie uruchomisz to polecenie, gdy aplikacja jest już uruchomiona?
KCotreau,
nic. Polecenie rozpoznaje, że aplikacja już działa.
Sid

Odpowiedzi:

12

To nie zawsze działa (to zależy od tego, jak program się ładuje), ale zwykle możesz utworzyć plik wsadowy w następujący sposób:

@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

Użyłem Notatnika jako przykładu.

Linie

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

to tylko opóźnienie (10 sekund), aby dać użytkownikowi szansę przerwania procesu przed jego ponownym uruchomieniem.

Linia

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

nie jest potrzebne, ale loguje się przy każdym zamknięciu programu do pliku, więc może być przydatne zdiagnozowanie problemu Błąd ErrorLevel może niewiele powiedzieć, ale program powinien zwrócić 0, jeśli zamknął się normalnie, a wartość non -zerowa wiadomość, jeśli nie ma

Uwaga: wspominasz, że program nic nie robi, jeśli jest już uruchomiony. Zazwyczaj oznacza to, że aplikacja się uruchamia, wykrywa, że ​​kolejna kopia już działa i natychmiast się wyłącza. Jeśli tak jest, a program uruchomi się przed uruchomieniem tego pliku wsadowego, wówczas partia zapętli się i spróbuje uruchomić program co dziesięć sekund.

sgmoore
źródło
„wtedy partia zapętla się i próbuje uruchamiać program co dziesięć sekund.” Czy to źle?
posfan12,
dzięki!! Trochę skopiuj i wklej o 00:52 i mogę iść spać bez (zbyt dużego) niepokoju o to, co znajdę (lub nie znajdę) rano. Uh po porannym śnie.
Spike0xff,
2

Na podstawie powyższych odpowiedzi sugeruję, aby umieścić to polecenie w pliku wsadowym, a następnie ustawić, aby plik wsadowy był uruchamiany jako zaplanowane zadanie co minutę. Nie ma z tym praktycznie żadnego narzutu i zapewnia, że ​​proces zostanie określony niezależnie od tego, czy jesteś w pobliżu, aby zdać sobie sprawę, że został zatrzymany.

KCotreau
źródło
To wydaje mi się dość niezdarnym i nieefektywnym rozwiązaniem, choć szybkim. Czy jest może bardziej odpowiedni środek do tego samego celu? Dzięki za pomoc!!!
Sid
Sid, jak powiedziałem, koszty ogólne są BARDZO minimalne i ŁATWE do zrobienia. Jeśli chcesz znaleźć sposób na zakodowanie czegoś, aby sprawdzić, czy działa, a następnie ponownie go uruchomić, nie krępuj się, ale robię to od dłuższego czasu z pozytywnymi wynikami. Jest to powszechna metoda stosowana, gdy aplikacje, zwykle na serwerze, przestają działać.
KCotreau,
Zdecydowanie najłatwiejsza metoda. I nie ma narzutów.
surfasb
2

Chyba właściwa odpowiedź na to pytanie zależy od tego , dlaczego chcesz to zrobić. Czy próbujesz rozwiązać przypadkowe wyłączenie? Czy zapobiec przypadkowemu „złośliwemu” wyłączeniu przez użytkowników maszyny (np. Pracowników zamykających oprogramowanie monitorujące)? Zapobiegać poważnemu i wykwalifikowanemu złośliwemu atakowi? Czy próbujesz samodzielnie napisać złośliwe oprogramowanie (w takim razie odpuść ;-))?

Ponadto, jak wspomnieli inni komentatorzy, byłoby inaczej, gdybyś napisał usługę Windows (na przykład)

Osobiście prawdopodobnie zacznę od napisania drugiej aplikacji i uruchomienia jej w ten sam sposób. Mieć obie aplikacje skanowania dla siebie okresowo i ponownie w razie potrzeby - upewnij się, że zapewniają łatwy sposób dla aplikacji mają być zamknięte choć legalnie!

To powiedziawszy, i biorąc pod uwagę twój komentarz „czasami sam się zamknę”. NAPRAWDĘ zacznę od próby wyjaśnienia, dlaczego jest zamknięty ...

Steve Mallam
źródło
Używam komputera jako serwera multimediów, a złośliwą aplikacją jest mediaserver.exe. Nic złego w tym. Nie mogę przewidzieć żadnego scenariusza, w którym chciałbym zamknąć aplikację, ale gdybym to zrobił, nie byłoby powodu, dla którego nie mogłem najpierw zatrzymać skryptu lub nietoperza. Nie jestem też w stanie pisać oprogramowania, ale znam pliki nietoperzy. tzn. jestem noobem.
Sid
Przepraszam - pomyślałbym, że jestem w grupie „Programistów” i że sam napisałeś aplikację :-) Niezdarnie, jak się wydaje, sugerowałbym podejście „zaplanowane zadanie” opisane przez @KCotreau
Steve Mallam
2

Możesz użyć programu o nazwie ReStartMe 2.0 [ Mirror ] robi dokładnie to:

Monitoruje procesy i uruchamia je ponownie, jeśli zostaną zamknięte.

Saxtus
źródło
-1

to jest o wiele lepsze! to jest jakiś kod, którego używałem dla najmniejszego serwera gry, który powinien być zapisany w pliku .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)
Gry Rottweiler
źródło