Настройка приложения Windows для работы на неопределенный срок с помощью PowerShell
Если вы привыкли к bash
и плохо знакомы с PowerShell, даже самые простые задачи могут сбивать с толку. Для всех администраторов Linux, вынужденных использовать Windows Server, вот как настроить программу для запуска в качестве демона с автоматическим перезапуском.
Пока ($true), Start-Process
В PowerShell вы можете зацикливаться, как и во многих языках программирования и сценариев. Синтаксис: while($true)
, за которым следуют фигурные скобки для цикла.
В этом цикле мы собираемся запустить процесс с помощью Start-Process
. Это требует аргумента -FilePath
с путем к вашему исполняемому файлу. Для этого можно использовать относительный путь.
while($true) { Start-Process -FilePath .StartServer.exe -Wait }
Вам также понадобится параметр -Wait
, потому что по умолчанию PowerShell будет бесконечно зацикливаться и потреблять всю вашу оперативную память, отключая вас от RDP и принудительно перезапуская сервер. Я обнаружил это трудным путем, поэтому убедитесь, что он ждет.
Это запустит процесс как отдельное окно, а окно PowerShell будет работать в фоновом режиме. Если приложение аварийно завершает работу или завершает работу, сценарий PowerShell автоматически перезапустит его.
Если вам сложно работать в собственном окне, попробуйте запустить его с параметром -NoNewWindow
. Однако это не очень хорошо обрабатывает stderr, поэтому вы можете попробовать Invoke-Process
, пользовательскую функцию из галереи PowerShell.
В моем случае я запускал несколько таких окон, поэтому я установил заголовки как имя каталога, чтобы я мог различать их.
$host.ui.RawUI.WindowTitle = $(get-location)
Запуск при запуске
Это не был бы демон, если бы перезагрузка сервера испортила всю вашу работу, поэтому вам нужно настроить этот скрипт для запуска при запуске.
К счастью, в Windows это довольно просто. Откройте планировщик заданий:
Создайте новую базовую задачу:
Установите его для запуска при запуске компьютера:
Выберите «Запустить программу» и найдите свой сценарий. Здесь вы также можете добавить аргументы.
И при этом вы должны быть защищены от перезапусков и случайных сбоев приложений.