Утилита для управления серверами из командной строки.
Можно положить в любом месте на диске. Скрипт распознает следующие варианты использования (в порядке понижения приоритета):
* явно указан путь до корня Open Server в виде -d DIR
* задана переменная OSP_HOME
* запущен изнутри каталога Open Server, то есть текущий каталог находится в иерархии пакета
* физически расположен в одном из подкаталогов Open Server
Есть две версии скрипта - пакетный для cmd.exe и шелл-скрипт для BusyBox, Cygwin и прочее.
Использование
USAGE ospctl [-v] [-d DIR] CMD OPTIONS DIR is the directory to specify another location for Open Server. CMD is one of the commands explained below. These commands are used to control the Open Server main process: run Launch the Open Server kill Terminate the Open Server force-kill Terminate the Open Server forcefully These commands are used to control servers: start Start servers stop Stop servers restart Restart servers Other commands status Show status for all processes ENVIRONMENT OSP_HOME If specified and valid, it's used as the Open Server home directory. It can be overwritten with the "-d" option in the command line.
Код
Здесь выкладываю последнюю на момент публикации cmd-версию. Этот же скрипт и его шелл-вариант лежат в репозитории: https://github.com/ildar-shaimordanov/o ... ool-ospctl.
::USAGE :: ospctl [-v] [-d DIR] CMD :: ::OPTIONS :: DIR is the directory to specify another location for Open Server. :: :: CMD is one of the commands explained below. :: :: These commands are used to control the Open Server main process: :: run Launch the Open Server :: kill Terminate the Open Server :: force-kill Terminate the Open Server forcefully :: :: These commands are used to control servers: :: start Start servers :: stop Stop servers :: restart Restart servers :: :: Other commands :: status Show status for all processes :: ::ENVIRONMENT :: OSP_HOME :: If specified and valid, it's used as the Open Server home directory. :: It can be overwritten with the "-d" option in the command line. @echo off setlocal set "OSP_NAME=Open Server.exe" set "OSP_VERBOSE=" if /i "%~1" == "-v" ( set "OSP_VERBOSE=1" shift /1 ) if /i "%~1" == "-d" ( set "OSP_HOME=%~2" shift /1 shift /1 ) if "%~1" == "" goto :print_usage if defined OSP_HOME ( set "OSP_HOME=" & call :detect "%OSP_HOME%" ) else ( call :detect "%CD%" if not defined OSP_HOME if "%CD%\." neq "%~dp0." call :detect "%~dp0" ) if not defined OSP_HOME ( call :warn "%OSP_NAME% not found" exit /b 1 ) for %%a in ( run kill force-kill status ) do if /i "%~1" == "%%~a" goto :%%~a for %%a in ( start stop restart ) do if /i "%~1" == "%%~a" ( call :load-ini call :send-command %%~a goto :EOF ) call :warn "Illegal command: '%~1'" exit /b 1 :: ======================================================================== :detect for %%f in ( "%~1\." ) do ( if defined OSP_VERBOSE call :warn "Try: %%~ff" if exist "%%~ff\%OSP_NAME%" ( set "OSP_HOME=%%~ff" ) else if not "%%~df\." == "%%~ff." ( call %~0 "%%~ff\.." ) ) goto :EOF :: ======================================================================== :run echo:Running... start "Running..." /b "%OSP_HOME%\%OSP_NAME%" goto :EOF :: ======================================================================== :kill echo:Terminating... taskkill /fi "IMAGENAME EQ %OSP_NAME%" goto :EOF :: ======================================================================== :force-kill echo:Killing... taskkill /f /fi "IMAGENAME EQ %OSP_NAME%" goto :EOF :: ======================================================================== :load-ini for /f "usebackq tokens=1,* delims==" %%a in ( "%OSP_HOME%\userdata\init.ini" ) do ( if /i "%%~a" == "web" set "OSP_INI_WEB=%%~b" if /i "%%~a" == "login" set "OSP_INI_USER=%%~b" if /i "%%~a" == "pass" set "OSP_INI_PASS=%%~b" if /i "%%~a" == "port" set "OSP_INI_PORT=%%~b" ) goto :EOF :: ======================================================================== :send-command if %OSP_INI_WEB% neq 1 ( call :warn "Web management not enabled" exit /b 1 ) echo:Sending command: '%~1' "%OSP_HOME%\modules\wget\bin\wget.exe" --http-user="%OSP_INI_USER%" --http-passwd="%OSP_INI_PASS%" -q -O nul "http://127.0.0.1:%OSP_INI_PORT%/%~1" goto :EOF :: ======================================================================== :status for %%f in ( powershell.exe wmic.exe ) do if not "%%~$PATH:f" == "" goto :status_%%~nf call :warn "Unable to display status" goto :EOF :status_powershell powershell -c "gwmi Win32_Process|?{$_.Caption -eq '%OSP_NAME%'}|%% {($p=$_.ProcessId),$_.CommandLine,''}; if($p){gwmi Win32_Process|?{$_.ParentProcessId -eq $p}|%% {$_.ProcessId,$_.CommandLine,''}}" goto :EOF :status_wmic set "OSP_PID=" for /f "tokens=1,* delims==" %%a in ( ' wmic Process where Caption^="%OSP_NAME%" get ProcessId^,CommandLine /value ^| findstr "." ' ) do ( echo:%%~a=%%~b if /i "%%~a" == "ProcessId" set "OSP_PID=%%~b" ) if not defined OSP_PID goto :EOF echo: wmic Process where ParentProcessId=%OSP_PID% get ProcessId,CommandLine /value goto :EOF :: ======================================================================== :warn >&2 echo:%~1 goto :EOF :: ======================================================================== :print_usage for /f "tokens=1,* delims=:" %%a in ( 'findstr /n "." "%~f0"' ) do ( if /i "%%~b" == "@echo off" goto :EOF echo:%%~b ) goto :EOF :: ======================================================================== :: EOF