Автоматично перезапустити додаток, коли він закриється


10

У мене є серверна програма, яку я хочу запускати, коли комп'ютер працює, і зазвичай це так, за винятком випадків, коли я вважаю, що він закрився сам собою.

Чи є біт або сценарій, який я можу запустити, щоб відстежувати додаток і перезапустити його, якщо він закриється?


Який тип програми та як він зазвичай запускається? Як послуга, в реєстрі як команда запуску, або в папку запуску?
KCotreau

Команда запуску реєстру. з опцією '-start'.
Sid

Що зараз відбувається, якщо запустити цю команду ще раз із запущеним додатком?
KCotreau

нічого. Команда розпізнає, що програма вже запущена.
Sid

Відповіді:


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

Я використовував Блокнот як приклад.

Лінії

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, якщо вона закрита нормально, а не -zero повідомлення, якщо цього немає

Зауважте, ви згадуєте, що програма нічого не робить, якщо вона вже запущена. Зазвичай це означає, що програма запускає, виявляє, що інша копія вже запущена і негайно відключається. Якщо це так, і ваша програма працює до запуску цього пакетного файлу, пакет буде обводитися циклом і намагатиметься запускати програму кожні десять секунд.


"тоді пакет буде кругообіг і намагатиметься запускати програму кожні десять секунд." Це погано?
posfan12

Дякую!! Трохи копіюйте та вставляйте о 12:52, і я можу спати, не переймаючись тим, що зранку знайду (чи не знайду). Ага. в ранок після сну.
Spike0xff

2

Виходячи з ваших відповідей вище, я пропоную те, що ви кладете цю команду в пакетний файл, а потім встановлюєте цей пакетний файл, щоб він працював як заплановане завдання щохвилини. З цим практично немає накладних витрат, і це гарантує, що ваш процес буде заявлений незалежно від того, чи знаходитесь ви навколо, навіть зрозумівши, що його зупинили.


Це вражає мене як досить незграбне і неефективне рішення, хоча і швидке. Чи, можливо, є більш підходящий засіб для цієї ж мети? Спасибі за вашу допомогу!!!
Sid

Як я вже сказав, Сид, накладні витрати ДУЖЕ мінімальні, і це ЛЕГКО робити. Якщо ви хочете знайти спосіб кодування чогось, щоб перевірити, чи працює він, а потім його знову запустити, не соромтеся, але я вже давно роблю це з позитивними результатами. Це звичайний метод, який використовується, коли у вас є додатки, як правило, на сервері, які припиняють працювати.
KCotreau

На сьогоднішній день найпростіший метод. І немає накладних витрат.
surfasb

2

Я думаю, що правильна відповідь на це питання залежить від того, чому ти хочеш це зробити. Ви намагаєтеся вирішити випадкове відключення? Запобігати випадковому "зловмисному" відключенню користувачами машини (наприклад, працівниками, які закривають програмне забезпечення для моніторингу)? Запобігти серйозну та кваліфіковану зловмисну ​​атаку? Чи намагаєтесь ви самостійно писати шкідливі програми (у такому випадку, будь ласка, заглушіть ;-))?

Крім того, як згадували інші коментатори, це відрізнятиметься, якби ви написали службу Windows (наприклад)

Особисто я, мабуть, почав би з написання другої заявки і запустив її так само. Нехай обидві програми періодично сканують один одного та, якщо потрібно, перезавантажте - переконайтеся, що ви надаєте простий спосіб законного закриття програми!

Це сказав, і з огляду на ваш коментар "іноді я вважаю, що він закрився сам собою", Я б СПІЛЬНО почав, намагаючись з'ясувати, чому це закрито ...


Я використовую комп’ютер як медіа-сервер, а ображаючим додатком є ​​mediaserver.exe. Нічого злісного в цьому немає. Я не можу передбачити жодного сценарію, який би я хотів, щоб програма закрилася, але якби я був, не було б причини, щоб я не міг зупинити сценарій чи бат першим. Також я не вмію писати програмне забезпечення, але знайомий з файлами bat. тобто я ноб.
Sid

Вибачення - це було б, я думаю, що я був у групі "Програмісти", і що ви самі написали додаток :-) Незграбно, як це звучить, я пропоную підхід "запланованого завдання", описаний @KCotreau
Стів Маллам


-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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.