Для OpenSSH на Windows, какая альтернатива nohup / screen / tmux?

Вопрос или проблема

У меня есть сервер OpenSSH на моем компьютере с Windows 11, и я могу запускать программы из PowerShell, когда подключаюсь с помощью какого-то клиента SSH.

Однако, когда я отключаюсь, все, что работает в фоновом режиме на компьютере с Windows и запущено из SSH-сессии, также завершает свою работу. Я изучал Start-Process, Start-Job и PS-Session, но похоже, что как только я заканчиваю свою SSH-сессию, запущенный процесс тоже прекращает работу.

На Linux я немного знаком с nohup, screen и tmux, но не знаю ничего подобного для Windows.

Существует ли способ запустить процесс на Windows из сессии PowerShell OpenSSH, который позволяет процессу продолжать работать после моего отключения, либо с возможностью подключения позже, либо просто остановить процесс другим способом?

Ответ или решение

Для пользователей OpenSSH на Windows, столкнувшихся с необходимостью запускать процессы из PowerShell, которые бы продолжали выполняться даже после завершения сеанса SSH, существуют несколько подходов. В отличие от Linux-систем, где широко используются инструменты такие как nohup, screen или tmux, на Windows есть свои методы и инструменты, позволяющие достичь аналогичного эффекта.

Альтернативы nohup, screen и tmux на Windows

  1. Использование Start-Process с параметром -NoNewWindow:
    При запуске процесса с помощью Start-Process, можно передать флаг -NoNewWindow, что позволит вашему процессу продолжить работать даже после выхода из SSH-сессии. Пример команды:

    Start-Process "C:\Path\To\Your\Executable.exe" -NoNewWindow
  2. PowerShell Background Jobs:
    PowerShell позволяет создавать фоновые задания с использованием командлета Start-Job. Однако, важно отметить, что такие задания могут завершиться, если SSH-сессия будет закрыта. Чтобы избежать этого, вы можете использовать командлет Invoke-Command с параметром -AsJob, который запускает скрипт в фоновом режиме:

    Invoke-Command -ScriptBlock { Start-Sleep -Seconds 300 } -AsJob

    Однако, как и в случае с Start-Job, их необходимо будет проверять и управлять прямо через PowerShell, что может быть неудобно в случае отключения.

  3. Использование Windows Task Scheduler:
    Один из самых надежных методов – это использовать планировщик задач Windows. Вы можете создать задачу, которая будет запускать вашу программу в фоновом режиме независимо от SSH-сессии. Для этого:

    • Откройте "Планировщик задач".
    • Создайте новую задачу, указав время или событие для запуска.
    • Настройте параметры так, чтобы задача запуска­лась независимо от того, авторизован ли пользователь или нет.
  4. WMI и PowerShell:
    Вы можете использовать WMI (Windows Management Instrumentation) для создания процесса, который остается активным даже после разрыва SSH-сессии. Пример кода на PowerShell:

    $Process = Get-WmiObject -Class Win32_Process | Where-Object { $_.Name -eq "YourProcess.exe" }
    if (-not $Process) {
        $null = [System.Diagnostics.Process]::Start("C:\Path\To\YourProcess.exe")
    }
  5. Использование сторонних инструментов:
    Если вам нужен более функциональный аналог screen или tmux, вы можете рассмотреть возможность использования таких инструментов, как ConEmu или Cmder, которые предоставляют возможности управления терминалом, включая поддержку вкладок и сеансов.

Заключение

Наличие аналогов утилит, подобных nohup, screen и tmux в Windows, зависит от специфических нужд пользователя. Но, благодаря функционалу PowerShell и встроенным инструментам Windows, вы можете эффективно управлять фоновыми процессами даже при использовании OpenSSH.

При выборе конкретного метода необходимо учитывать, как именно вы планируете взаимодействовать с запущенными процессами после отключения от SSH-сессии, и каков уровень удобства тех или иных инструментов.

Оцените материал
Добавить комментарий

Капча загружается...