diff options
Diffstat (limited to 'scripts/rabbitmq-service.bat')
| -rw-r--r-- | scripts/rabbitmq-service.bat | 257 |
1 files changed, 56 insertions, 201 deletions
diff --git a/scripts/rabbitmq-service.bat b/scripts/rabbitmq-service.bat index fe9884abf0..e9ee0ea74b 100644 --- a/scripts/rabbitmq-service.bat +++ b/scripts/rabbitmq-service.bat @@ -35,6 +35,38 @@ REM Get default settings with user overrides for (RABBITMQ_)<var_name> REM Non-empty defaults should be set in rabbitmq-env
call "%TDP0%\rabbitmq-env.bat" %~n0
+REM Check for the short names here too
+if "!RABBITMQ_USE_LONGNAME!"=="true" (
+ set RABBITMQ_NAME_TYPE=-name
+ set NAMETYPE=longnames
+) else (
+ if "!USE_LONGNAME!"=="true" (
+ set RABBITMQ_USE_LONGNAME=true
+ set RABBITMQ_NAME_TYPE=-name
+ set NAMETYPE=longnames
+ ) else (
+ set RABBITMQ_USE_LONGNAME=false
+ set RABBITMQ_NAME_TYPE=-sname
+ set NAMETYPE=shortnames
+ )
+)
+
+REM [ "x" = "x$RABBITMQ_NODENAME" ] && RABBITMQ_NODENAME=${NODENAME}
+if "!RABBITMQ_NODENAME!"=="" (
+ if "!NODENAME!"=="" (
+ REM We use Erlang to query the local hostname because
+ REM !COMPUTERNAME! and Erlang may return different results.
+ REM Start erl with -sname to make sure epmd is started.
+ call "%ERLANG_HOME%\bin\erl.exe" -A0 -noinput -boot start_clean -sname rabbit-prelaunch-epmd -eval "init:stop()." >nul 2>&1
+ for /f "delims=" %%F in ('call "%ERLANG_HOME%\bin\erl.exe" -A0 -noinput -boot start_clean -eval "net_kernel:start([list_to_atom(""rabbit-gethostname-"" ++ os:getpid()), %NAMETYPE%]), [_, H] = string:tokens(atom_to_list(node()), ""@""), io:format(""~s~n"", [H]), init:stop()."') do @set HOSTNAME=%%F
+ set RABBITMQ_NODENAME=rabbit@!HOSTNAME!
+ set HOSTNAME=
+ ) else (
+ set RABBITMQ_NODENAME=!NODENAME!
+ )
+)
+set NAMETYPE=
+
set STARVAR=
shift
:loop1
@@ -112,16 +144,6 @@ if not exist "!RABBITMQ_BASE!" ( echo Creating base directory !RABBITMQ_BASE! & mkdir "!RABBITMQ_BASE!"
)
-set ENV_OK=true
-CALL :check_not_empty "RABBITMQ_BOOT_MODULE" !RABBITMQ_BOOT_MODULE!
-CALL :check_not_empty "RABBITMQ_NAME_TYPE" !RABBITMQ_NAME_TYPE!
-CALL :check_not_empty "RABBITMQ_NODENAME" !RABBITMQ_NODENAME!
-
-
-if "!ENV_OK!"=="false" (
- EXIT /b 78
-)
-
"!ERLANG_SERVICE_MANAGER_PATH!\erlsrv" list !RABBITMQ_SERVICENAME! 2>NUL 1>NUL
if errorlevel 1 (
"!ERLANG_SERVICE_MANAGER_PATH!\erlsrv" add !RABBITMQ_SERVICENAME! -internalservicename !RABBITMQ_SERVICENAME!
@@ -129,165 +151,8 @@ if errorlevel 1 ( echo !RABBITMQ_SERVICENAME! service is already present - only updating service parameters
)
-set RABBITMQ_EBIN_ROOT=!RABBITMQ_HOME!\ebin
-
-CALL :convert_forward_slashes "!RABBITMQ_ADVANCED_CONFIG_FILE!" RABBITMQ_ADVANCED_CONFIG_FILE
-CALL :get_noex "!RABBITMQ_ADVANCED_CONFIG_FILE!" RABBITMQ_ADVANCED_CONFIG_FILE_NOEX
-
-if "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!" (
- set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config
- REM Try to create advanced config file, if it doesn't exist
- REM It still can fail to be created, but at least not for default install
- if not exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" (
- echo []. > !RABBITMQ_ADVANCED_CONFIG_FILE!
- )
-)
-
-CALL :convert_forward_slashes "!RABBITMQ_CONFIG_FILE!" RABBITMQ_CONFIG_FILE
-CALL :get_noex "!RABBITMQ_CONFIG_FILE!" RABBITMQ_CONFIG_FILE_NOEX
-
-if "!RABBITMQ_CONFIG_FILE!" == "!RABBITMQ_CONFIG_FILE_NOEX!" (
- if exist "!RABBITMQ_CONFIG_FILE_NOEX!.config" (
- if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" (
- rem Both files exist. Print a warning
- echo "WARNING: Both old (.config) and new (.conf) format config files exist."
- echo "WARNING: Using the old format config file: !RABBITMQ_CONFIG_FILE_NOEX!.config"
- echo "WARNING: Please update your config files to the new format and remove the old file"
- )
- set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.config
- ) else if exist "!RABBITMQ_CONFIG_FILE_NOEX!.conf" (
- set RABBITMQ_CONFIG_FILE=!RABBITMQ_CONFIG_FILE_NOEX!.conf
- ) else (
- rem No config file exist. Use advanced config for -config arg.
- if exist "!RABBITMQ_ADVANCED_CONFIG_FILE!" (
- echo "WARNING: Using RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!"
- )
- set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE!
- )
-)
-
-rem Set the -config argument.
-rem The -config argument should not have extension.
-rem the file should exist
-rem the file should be a valid erlang term file
-
-rem Config file extension is .config
-if "!RABBITMQ_CONFIG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_FILE!" (
- set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_CONFIG_FILE!
-) else if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" (
- set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE!
-) else if not "" == "!RABBITMQ_CONFIG_FILE!" (
- if not "!RABBITMQ_CONFIG_FILE_NOEX!" == "!RABBITMQ_CONFIG_FILE!" (
- rem Config file has an extension, but it's neither .conf or .config
- echo "ERROR: Wrong extension for RABBITMQ_CONFIG_FILE: !RABBITMQ_CONFIG_FILE!"
- echo "ERROR: extension should be either .conf or .config"
- exit /B 1
- )
-)
-
-CALL :convert_forward_slashes "!RABBITMQ_CONFIG_ARG_FILE!" RABBITMQ_CONFIG_ARG_FILE
-CALL :get_noex "!RABBITMQ_CONFIG_ARG_FILE!" RABBITMQ_CONFIG_ARG_FILE_NOEX
-
-if not "!RABBITMQ_CONFIG_ARG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_ARG_FILE!" (
- if "!RABBITMQ_CONFIG_ARG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE!" (
- echo "ERROR: Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!"
- echo "ERROR: extension should be .config"
- exit /B 1
- ) else (
- rem We should never got here, but still there should be some explanation
- echo "ERROR: Wrong extension for !RABBITMQ_CONFIG_ARG_FILE!"
- echo "ERROR: extension should be .config"
- exit /B 1
- )
-)
-
-rem Set -config if the file exists
-if exist !RABBITMQ_CONFIG_ARG_FILE! (
- set RABBITMQ_CONFIG_ARG=-config "!RABBITMQ_CONFIG_ARG_FILE_NOEX!"
-)
-
-rem Set -conf and other generated config parameters
-if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE!" (
- if not exist "!RABBITMQ_SCHEMA_DIR!" (
- mkdir "!RABBITMQ_SCHEMA_DIR!"
- )
-
- if not exist "!RABBITMQ_GENERATED_CONFIG_DIR!" (
- mkdir "!RABBITMQ_GENERATED_CONFIG_DIR!"
- )
-
- copy /Y "!RABBITMQ_HOME!\priv\schema\rabbit.schema" "!RABBITMQ_SCHEMA_DIR!\rabbit.schema"
-
- set RABBITMQ_GENERATED_CONFIG_ARG=-conf "!RABBITMQ_CONFIG_FILE:\=/!" ^
- -conf_dir "!RABBITMQ_GENERATED_CONFIG_DIR:\=/!" ^
- -conf_script_dir "!CONF_SCRIPT_DIR:\=/!" ^
- -conf_schema_dir "!RABBITMQ_SCHEMA_DIR:\=/!" ^
- -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE:\=/!"
-)
-
-"!ERLANG_HOME!\bin\erl.exe" ^
- -pa "!RABBITMQ_EBIN_ROOT:\=/!" ^
- -boot !CLEAN_BOOT_FILE! ^
- -noinput -hidden ^
- -s rabbit_prelaunch ^
- !RABBITMQ_NAME_TYPE! rabbitmqprelaunch!RANDOM!!TIME:~9!@localhost ^
- -conf_advanced "!RABBITMQ_ADVANCED_CONFIG_FILE!" ^
- -rabbit feature_flags_file "!RABBITMQ_FEATURE_FLAGS_FILE!" ^
- -rabbit enabled_plugins_file "!RABBITMQ_ENABLED_PLUGINS_FILE!" ^
- -rabbit plugins_dir "!RABBITMQ_PLUGINS_DIR!" ^
- -extra "!RABBITMQ_NODENAME!"
-
-if ERRORLEVEL 3 (
- rem ERRORLEVEL means (or greater) so we need to catch all other failure
- rem cases here
- exit /B 1
-) else if ERRORLEVEL 2 (
- rem dist port mentioned in config, do not attempt to set it
-) else if ERRORLEVEL 1 (
- exit /B 1
-) else (
- set RABBITMQ_DIST_ARG=-kernel inet_dist_listen_min !RABBITMQ_DIST_PORT! -kernel inet_dist_listen_max !RABBITMQ_DIST_PORT!
-)
-
-rem The default allocation strategy RabbitMQ is using was introduced
-rem in Erlang/OTP 20.2.3. Earlier Erlang versions fail to start with
-rem this configuration. We therefore need to ensure that erl accepts
-rem these values before we can use them.
-rem
-rem The defaults are meant to reduce RabbitMQ's memory usage and help
-rem it reclaim memory at the cost of a slight decrease in performance
-rem (due to an increase in memory operations). These defaults can be
-rem overridden using the RABBITMQ_SERVER_ERL_ARGS variable.
-
set RABBITMQ_DEFAULT_ALLOC_ARGS=+MBas ageffcbf +MHas ageffcbf +MBlmbcs 512 +MHlmbcs 512 +MMmcs 30
-"!ERLANG_HOME!\bin\erl.exe" ^
- !RABBITMQ_DEFAULT_ALLOC_ARGS! ^
- -boot !CLEAN_BOOT_FILE! ^
- -noinput -eval "halt(0)"
-
-if ERRORLEVEL 1 (
- set RABBITMQ_DEFAULT_ALLOC_ARGS=
-)
-
-
-set RABBITMQ_LISTEN_ARG=
-if not "!RABBITMQ_NODE_IP_ADDRESS!"=="" (
- if not "!RABBITMQ_NODE_PORT!"=="" (
- set RABBITMQ_LISTEN_ARG=-rabbit tcp_listeners "[{\"!RABBITMQ_NODE_IP_ADDRESS!\", !RABBITMQ_NODE_PORT!}]"
- )
-)
-
-if "!RABBITMQ_LOGS!" == "-" (
- set SASL_ERROR_LOGGER=tty
- set RABBIT_LAGER_HANDLER=tty
- set RABBITMQ_LAGER_HANDLER_UPGRADE=tty
-) else (
- set SASL_ERROR_LOGGER=false
- set RABBIT_LAGER_HANDLER="\"!RABBITMQ_LOGS:\=/!\""
- set RABBITMQ_LAGER_HANDLER_UPGRADE="\"!RABBITMQ_UPGRADE_LOG:\=/!\""
-)
-
set RABBITMQ_START_RABBIT=
if "!RABBITMQ_NODE_ONLY!"=="" (
set RABBITMQ_START_RABBIT=-s "!RABBITMQ_BOOT_MODULE!" boot
@@ -301,45 +166,46 @@ if "!RABBITMQ_SERVICE_RESTART!"=="" ( set RABBITMQ_SERVICE_RESTART=restart
)
+set ENV_OK=true
+CALL :check_not_empty "RABBITMQ_BOOT_MODULE" !RABBITMQ_BOOT_MODULE!
+CALL :check_not_empty "RABBITMQ_NAME_TYPE" !RABBITMQ_NAME_TYPE!
+CALL :check_not_empty "RABBITMQ_NODENAME" !RABBITMQ_NODENAME!
+
+if "!ENV_OK!"=="false" (
+ EXIT /b 78
+)
+
set ERLANG_SERVICE_ARGUMENTS= ^
--pa "!RABBITMQ_EBIN_ROOT:\=/!" ^
--boot start_sasl ^
!RABBITMQ_START_RABBIT! ^
-!RABBITMQ_CONFIG_ARG! ^
-!RABBITMQ_GENERATED_CONFIG_ARG! ^
+-boot "!SASL_BOOT_FILE!" ^
+W w ^
+A "!RABBITMQ_IO_THREAD_POOL_SIZE!" ^
!RABBITMQ_DEFAULT_ALLOC_ARGS! ^
!RABBITMQ_SERVER_ERL_ARGS! ^
-!RABBITMQ_LISTEN_ARG! ^
--kernel inet_default_connect_options "[{nodelay,true}]" ^
!RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS! ^
--sasl errlog_type error ^
--sasl sasl_error_logger false ^
--rabbit lager_log_root "\"!RABBITMQ_LOG_BASE:\=/!\"" ^
--rabbit lager_default_file !RABBIT_LAGER_HANDLER! ^
--rabbit lager_upgrade_file !RABBITMQ_LAGER_HANDLER_UPGRADE! ^
--rabbit feature_flags_file "\"!RABBITMQ_FEATURE_FLAGS_FILE:\=/!\"" ^
--rabbit enabled_plugins_file "\"!RABBITMQ_ENABLED_PLUGINS_FILE:\=/!\"" ^
--rabbit plugins_dir "\"!RABBITMQ_PLUGINS_DIR:\=/!\"" ^
--rabbit plugins_expand_dir "\"!RABBITMQ_PLUGINS_EXPAND_DIR:\=/!\"" ^
--rabbit windows_service_config "\"!RABBITMQ_CONFIG_FILE:\=/!\"" ^
--mnesia dir "\"!RABBITMQ_MNESIA_DIR:\=/!\"" ^
--os_mon start_cpu_sup false ^
--os_mon start_disksup false ^
--os_mon start_memsup false ^
--ra data_dir \""!RABBITMQ_QUORUM_DIR:\=/!"\" ^
!RABBITMQ_SERVER_START_ARGS! ^
-!RABBITMQ_DIST_ARG! ^
+-lager crash_log false ^
+-lager handlers "[]" ^
!STARVAR!
set ERLANG_SERVICE_ARGUMENTS=!ERLANG_SERVICE_ARGUMENTS:\=\\!
set ERLANG_SERVICE_ARGUMENTS=!ERLANG_SERVICE_ARGUMENTS:"=\"!
+rem We resolve %APPDATA% at install time so that the user's %APPDATA%
+rem is passed to `rabbit_env` at runtime (instead of the service's
+rem %APPDAT%).
+rem
+rem The goal is to keep the same behavior as when RabbitMQ data
+rem locations were decided in `rabbitmq-env.bat` (sourced by this
+rem script), even if now, we compute everything in `rabbit_env` at
+rem runtime.
+rem
+rem We may revisit this in the future so that no data is stored in a
+rem user-specific directory.
"!ERLANG_SERVICE_MANAGER_PATH!\erlsrv" set !RABBITMQ_SERVICENAME! ^
-onfail !RABBITMQ_SERVICE_RESTART! ^
-machine "!ERLANG_SERVICE_MANAGER_PATH!\erl.exe" ^
--env ERL_CRASH_DUMP="!RABBITMQ_BASE:\=/!/erl_crash.dump" ^
+-env APPDATA="!APPDATA!" ^
-env ERL_LIBS="!ERL_LIBS!" ^
-env ERL_MAX_ETS_TABLES="!ERL_MAX_ETS_TABLES!" ^
-env ERL_MAX_PORTS="!ERL_MAX_PORTS!" ^
@@ -386,17 +252,6 @@ if "%~2"=="" ( )
EXIT /B 0
-:get_noex
-set "%~2=%~dpn1"
-EXIT /B 0
-
-rem Convert unix style path separators into windows style path separators
-rem needed for comparing with _NOEX variables
-rem rabbitmq/rabbitmq-server#1962
-:convert_forward_slashes
-set "%~2=%~dpf1"
-EXIT /B 0
-
endlocal
endlocal
endlocal
|
