Kapandığında uygulamayı otomatik olarak yeniden başlat


10

Bilgisayar çalışırken her zaman çalıştırmak istediğim bir sunucu uygulamam var ve bazen kendim kapadığımı fark edeceğim dışında genellikle durum böyle.

Uygulamayı izlemek ve kapatılması durumunda yeniden başlatmak için çalıştırabileceğim bir yarasa veya komut dosyası var mı?


Ne tür bir uygulama ve normal olarak nasıl başlıyor? Hizmet olarak, kayıt defterinde bir çalıştırma komutu olarak mı yoksa başlangıç ​​klasöründe mi?
KCotreau

Kayıt defteri çalıştırma komutu. '-start' seçeneği ile.
Sid

Bu komutu uygulama zaten çalışıyorken tekrar çalıştırırsanız ne olur?
KCotreau

hiçbir şey değil. Komut, uygulamanın zaten çalışmakta olduğunu tanır.
Sid

Yanıtlar:


12

Bu her zaman işe yaramaz (programın kendini nasıl yüklediğine bağlıdır), ancak normalde böyle bir toplu iş dosyası oluşturabilirsiniz:

@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'i örnek olarak kullandım.

Çizgiler

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

kullanıcıya yeniden başlamadan önce işlemi iptal etme şansı vermek için sadece 10 saniyelik bir gecikmedir.

Çizgi

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

gerekli değildir, ancak program bir dosyaya her kapatıldığında günlüğe kaydedilir, bu nedenle sorunu tanılamak yararlı olabilir ErrorLevel size çok fazla bilgi vermeyebilir, ancak bir program normal olarak kapatılırsa 0 döndürmesi gerekir ve - sıfır değilse mesaj

Not: Programın zaten çalışıyorsa hiçbir şey yapmadığını belirtmişsinizdir. Bu genellikle uygulamanın başladığı, başka bir kopyanın zaten çalıştığını algılar ve hemen kapanır anlamına gelir. Bu durumda ve programınız bu toplu iş dosyasını başlatmadan önce çalışıyorsa, toplu iş döngüde dönecek ve her on saniyede bir programınızı başlatmaya çalışacaktır.


"daha sonra toplu iş döngüde ilerler ve programınızı on saniyede bir başlatmaya çalışır." Bu kötü bir şey mi?
posfan12

Teşekkürler!! Küçük bir kopyala ve 00: 52'de yapıştırın, ve ben sabah (ne bulacağım) bulacağım hakkında (çok fazla) endişelenmeden uyuyabilir. Uh. uyku sonrası sabah.
Spike0xff

2

Yukarıdaki yanıtlarınıza dayanarak, bu komutu bir toplu iş dosyasına koyduğunuzda, bu toplu iş dosyasını her dakika zamanlanmış görev olarak çalışacak şekilde ayarlamanız önerilir. Bununla ilgili neredeyse hiç bir ek yük yoktur ve işleminizin durduğunu fark etmek için etrafınızda olup olmadığınıza bakılmaksızın işleminizin belirtilmesini sağlar.


Bu, hızlı olmasına rağmen beni oldukça beceriksiz ve verimsiz bir çözüm olarak vuruyor. Aynı amaç için belki daha uygun bir yol var mı? Yardımın için teşekkürler!!!
Sid

Sid, dediğim gibi, havai ÇOK minimal ve bunu yapmak KOLAY. Çalışıp çalışmadığını kontrol etmek ve daha sonra yeniden başlatmak için bir şey kodlamak için bir yol bulmak istiyorsanız, çekinmeyin, ancak bunu uzun zamandır olumlu sonuçlarla yapıyorum. Genellikle sunucuda bulunan ve çalışmayı durduran uygulamalarınız olduğunda yaygın olarak kullanılan bir yöntemdir.
KCotreau

Şimdiye kadar en kolay yöntem. Ve ek yük yok.
surfasb

2

Sanırım bu sorunun doğru cevabı neden yapmak istediğinize bağlı. Yanlışlıkla kapatmayı çözmeye mi çalışıyorsunuz? Makine kullanıcıları tarafından rasgele "kötü amaçlı" bir şekilde kapatılmasını önleme (örn. İzleme yazılımını kapatan çalışanlar)? Ciddi ve yetenekli kötü niyetli saldırıları önler misiniz? Kötü amaçlı yazılımları kendiniz mi yazmaya çalışıyorsunuz (bu durumda lütfen sod ;-))

Ayrıca, diğer yorumcuların da belirttiği gibi, bir Windows hizmeti yazsaydınız farklı olabilir (örneğin)

Şahsen, muhtemelen ikinci bir başvuru yazarak ve aynı şekilde başlatacağım. Var hem uygulamalar için tarama birbirlerine markasını emin uygulama meşru olsa kapatılması için kolay bir yol sağlar - periyodik ve yeniden gerekirse!

Bu dedi ve yorumunuzu verilen "bazen kendi kendine kapalı bulmak için bulacağım" GERÇEKTEN neden kapalı olduğunu bulmaya çalışarak başlar ...


Bilgisayarı bir medya sunucusu olarak kullanıyorum ve rahatsız edici uygulama mediaserver.exe. Bu konuda kötü bir şey yok. Uygulamanın kapanmasını istediğim herhangi bir senaryoyu öngöremiyorum, ama eğer olsaydım, önce senaryoyu ya da yarasayı durduramamam için hiçbir sebep olmazdı. Ayrıca, yazılım yazamıyorum, ancak bat dosyalarını tanıyorum. yani ben bir çaylağım.
Sid

Özür dilerim - bu "Programcılar" grubunda olduğumu ve uygulamayı kendiniz yazacağınızı düşünmek olurdu :-) Sakar gibi geliyor gibi @KCotreau tarafından açıklanan "zamanlanmış görev" yaklaşımını öneririm
Steve


-1

bu çok daha iyi! Bu bir minetest oyun sunucusu için kullandığınız bazı kod .bat dosyasına kaydedilmelidir

@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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.