Вопрос или проблема
Я ищу бесплатное программное обеспечение для Windows с следующими требованиями. В идеале я ищу функциональность, эквивалентную systemctl в Linux.
Стандартные службы Windows не смогли удовлетворить мои потребности.
- Возможность регистрировать произвольные команды, такие как exe и py файлы.
- Должно быть возможно запускать программу CLI в фоновом режиме.
- Стандартный вывод и стандартный вывод ошибок должны записываться в текстовый файл с отметкой времени, чтобы их можно было проверить позже.
- Когда программа CLI завершается аномально, она автоматически перезапускается.
- Окно CMD не должно отображаться при выполнении программы CLI.
- Зарегистрированные программы можно перечислить. Должно также отображаться количество раз, когда программа была перезапущена после аномального завершения.
- Не нужно вносить изменения в программу CLI.
- Бесплатно и без ограничений по функциям.
Я ищу бесплатное программное обеспечение.
Устроенная служба Windows не имеет возможности сохранять стандартный вывод в текстовый файл. Также программа, которую необходимо зарегистрировать, должна быть .exe
, и к .exe
необходимо добавить специфическую для службы логику.
Я собирался использовать systemctl в WSL2, но WSL2 останавливает systemctl через минуту или около того, когда я закрываю терминал.
Вы можете попробовать NSSM. Это бесплатно и с открытым исходным кодом.
- Вы можете использовать его для регистрации любого исполняемого файла (например, .exe или .py) в качестве службы Windows.
- Он позволяет запускать программы CLI в фоновом режиме в качестве служб Windows.
- Он перенаправляет как стандартный вывод, так и стандартный вывод ошибок в файлы, и вы можете указывать имена файлов с отметками времени.
- Возможно настроить автоматический перезапуск при сбое.
- Он может запускать программы без отображения окна командной строки.
- Он предоставляет команды для перечисления всех зарегистрированных служб и их свойств, включая количество перезапусков после аномального завершения.
- Если вы хотите избежать внесения изменений в саму программу CLI, вы можете обернуть программу CLI с помощью скрипта или bat-файла.
Создайте файл wrapper.bat следующим образом:
@echo off
setlocal
set LOG_DIR=C:\Path\To\Logs
mkdir "%LOG_DIR%" 2>nul
:run_program
"%~dp0\YourCLIProgram.exe" >> "%LOG_DIR%\output.log" 2>> "%LOG_DIR%\error.log"
echo Программа завершилась аномально. Перезапускаю...
goto run_program
Затем в NSSM:
nssm install MyService "C:\Path\To\wrapper.bat"
nssm set MyService AppDirectory "C:\Path\To\Directory\Containing\Batch\File"
nssm start MyService
Ответ или решение
Для решения вашей задачи по поиску программного обеспечения для управления службами в Windows, которое напоминает функциональность Linux systemctl, я рекомендую обратить внимание на NSSM (Non-Sucking Service Manager). NSSM — это бесплатное и открытое программное обеспечение, которое отвечает всем вашим требованиям. Вот подробное описание его основных функций и шаги по установке.
Возможности NSSM
-
Регистрация произвольных команд: NSSM позволяет регистрировать любые исполняемые файлы (.exe, .py) в качестве служб Windows. Это значит, что вы можете использовать как стандартные приложения, так и свои собственные CLI-скрипты.
-
Запуск в фоновом режиме: В отличие от стандартного сервиса Windows, NSSM запускает вашу программу как фоновый процесс, что избавляет от необходимости открывать CMD окно.
-
Перенаправление вывода: NSSM позволяет перенаправлять стандартный вывод и ошибки в текстовые файлы с добавлением временных меток. Можно настроить конкретные имена файлов для логирования, что облегчает последующий анализ.
-
Автоматический перезапуск: В случае ненормального завершения вашей программы, NSSM может автоматически перезапустить её, что является критически важной функцией для обеспечения устойчивости.
-
Список зарегистрированных программ: NSSM предоставляет удобный интерфейс для отображения всех зарегистрированных служб и их свойств, включая количество перезапусков после аварийного завершения.
-
Без изменений в CLI программе: Не требуется вносить изменения в саму CLI-программу. Вы можете обернуть её в скрипт или пакетный файл.
-
Бесплатное использование: NSSM полностью бесплатен и не имеет ограничений по функциям, что делает его идеальным решением для индивидуальных разработчиков и малых предприятий.
Установка NSSM
Вот пошаговая инструкция, как установить и настроить NSSM для работы с вашей программой:
-
Скачивание NSSM: Перейдите на официальный сайт NSSM и скачайте последнюю версию. Распакуйте архив в удобное для вас место.
-
Создание оболочки (обертки): Напишите файл wrapper.bat для вашей программы, чтобы управлять её выполнением и логированием. Пример содержимого файла:
@echo off setlocal set LOG_DIR=C:\Path\To\Logs mkdir "%LOG_DIR%" 2>nul :run_program "%~dp0\YourCLIProgram.exe" >> "%LOG_DIR%\output.log" 2>> "%LOG_DIR%\error.log" echo Программа завершилась аномально. Перезапуск... goto run_program
-
Регистрация службы NSSM: Откройте командную строку (CMD) с правами администратора и выполните следующие команды:
nssm install MyService "C:\Path\To\wrapper.bat" nssm set MyService AppDirectory "C:\Path\To\Directory\Containing\Batch\File" nssm start MyService
Здесь
MyService
— это имя вашей новой службы, а путь указывает на расположение вашегоwrapper.bat
и самого CLI-приложения. -
Управление службой: Вы можете управлять вашей службой с помощью NSSM. Например, для получения информации о службе:
nssm status MyService
Для остановки или перезапуска:
nssm stop MyService nssm restart MyService
Заключение
Использование NSSM обеспечит вам мощный и надежный инструмент для управления службами Windows, который наделен всеми необходимыми функциями, аналогичными systemctl в Linux. Это решение прекрасно вписывается в ваш запрос на бесплатное и функциональное программное обеспечение. NSSM поможет вам эффективно контролировать запуск программ, обрабатывать их логи и поддерживать стабильность работы системы.
Если у вас появятся дополнительные вопросы или потребуется помощь в настройке, не стесняйтесь обращаться.