bitwalker / bitwalker/distillery
Starting in foreground mode on windows fails to get PID and returns errorlevel 1
- Dominant language
- Elixir
- Stars
- 3k
- Forks
- 398
- PR merge metrics
- No merged PRs in 30d
Description
### Steps to reproduce
* Install Windows 7 SP1
* Create release with MIX_ENV=prod
* Try to call _build\ENV\rel\YOURAPPNAME\VERSION\YOURAPPNAME.bat foreground
### Verbose Logs
Paste the output of the release command you ran with the `--verbose` flag.
This is in Polish, but when you run it, it first fails with
"System nie może odnaleźć pliku `%get_pid_cmd%`.'
which means
"System is unable to locate file `%get_pid_cmd%`"
and than the subsequent call to tasklist fails with
"BŁĄD: Nieznany filtr wyszukiwania."
which means
"ERROR: Invalid search filter"
which makes sense as there's no PID after `eq`.
The app is being started despite the error.
```
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>vendor-app.bat foreground
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set rel_name=vendor-app
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set rel_vsn=0.8.0
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set erts_vsn=8.3
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set erl_opts=-smp enabled
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set script_dir=C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>for %A in ("C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\\..\..") do @(set release_root_dir=%~fA )
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set rel_dir=C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if "" == "" (set mutable_dir=C:\app\src\backend\_build\prod\rel\vendor-app\var ) else (set mutable_dir=RELEASE_MUTABLE_DIR )
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if "" == "" (set config_dir=C:\app\src\backend\_build\prod\rel\vendor-app ) else (set config_dir= )
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set log_dir=C:\app\src\backend\_build\prod\rel\vendor-app\var\log
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if not exist C:\app\src\backend\_build\prod\rel\vendor-app\var mkdir C:\app\src\backend\_build\prod\rel\vendor-app\var
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if not exist C:\app\src\backend\_build\prod\rel\vendor-app mkdir C:\app\src\backend\_build\prod\rel\vendor-app
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if not exist C:\app\src\backend\_build\prod\rel\vendor-app\var\log mkdir C:\app\src\backend\_build\prod\rel\vendor-app\var\log
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :find_erts_dir
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if "8.3" == "" (call :use_system_erts ) else (call :use_bundled_erts )
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set erts_dir=C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set erl=C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\bin\erl
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set rootdir=C:\app\src\backend\_build\prod\rel\vendor-app
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :find_sys_config
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set possible_sys=\sys.config
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if exist \sys.config (set sys_config_src=\sys.config ) else (set sys_config_src=C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\sys.config )
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set sys_config_target=C:\app\src\backend\_build\prod\rel\vendor-app\sys.config
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>powershell -command "$content = get-content C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\sys.config; [regex]::matches($content, '\${[\w\d_-]+}') | foreach { $content = $content.Replace($_.value, [System.Environment]::GetEnvironmentVariable($_.value)) }; out-file -filepath C:\app\src\backend\_build\prod\rel\radiokit-app\sys.config -inputobject $content -encoding ascii"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set sys_config=C:\app\src\backend\_build\prod\rel\vendor-app\sys.config
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :find_vm_args
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set possible_vmargs=\vm.args
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if exist \vm.args (set vmargs_src=\vm.args ) else (set vmargs_src=C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\vm.args )
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set vmargs_target=C:\app\src\backend\_build\prod\rel\vendor-app\vm.args
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>powershell -command "$content = get-content C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\vm.args; [regex]::matc
hes($content, '\${[\w\d_-]+}') | foreach { $content = $content.Replace($_.value, [System.Environment]::GetEnvironmentVariable($_.value)) }; out-file -filepath C:\app\src\backend\_build\prod\rel\radiokit-app\vm.args -inputobject $content -encoding ascii"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set vm_args=C:\app\src\backend\_build\prod\rel\vendor-app\vm.args
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :set_boot_script_var
System nie może znaleźć etykiety pliku wsadowego - set_boot_script_var
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set service_name=vendor-app_0.8.0
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set bindir=C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\bin
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set progname=erl.exe
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set clean_boot_script=C:\app\src\backend\_build\prod\rel\vendor-app\bin\start_clean
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set erlsrv="C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\bin\erlsrv.exe"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set epmd="C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\bin\epmd.exe"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set escript="C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\bin\escript.exe"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set werl="C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\bin\werl.exe"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set nodetool="C:\app\src\backend\_build\prod\rel\vendor-app\bin\nodetool"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set consolidated_dir=C:\app\src\backend\_build\prod\rel\vendor-app\lib\vendor-app-0.8.0\consolidated
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set hook_dir=C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\hooks
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set command_dir=C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\commands
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>for /F "usebackq tokens=1-2" %I in (`findstr /b "\-name \-sname" "C:\app\src\backend\_build\prod\rel\vendor-app\vm.args"`) do @
(
set node_type=%I
set node_name=%J
)
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>for /F "usebackq tokens=1-2" %I in (`findstr /b \-setcookie "C:\app\src\backend\_build\prod\rel\vendor-app\vm.args"`) do @(set cookie=%J )
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :write_ini
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set erl_ini=C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\bin\erl.ini
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set converted_bindir=C:\\app\\src\\backend\\_build\\prod\\rel\\vendor-app\\erts-8.3\\bin
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set converted_rootdir=C:\\app\\src\\backend\\_build\\prod\\rel\\vendor-app
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>echo [erlang] 1>"C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\bin\erl.ini"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>echo Bindir=C:\\app\\src\\backend\\_build\\prod\\rel\\vendor-app\\erts-8.3\\bin 1>>"C:\app\src\backend\_build\prod\rel\radiokit-app\erts-8.3\bin\erl.ini"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>echo Progname=erl.exe 1>>"C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\bin\erl.ini"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>echo Rootdir=C:\\app\\src\\backend\\_build\\prod\\rel\\vendor-app 1>>"C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\bin\erl.ini"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if not exist "C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\start.boot" (copy "C:\app\src\backend\_build\prod\
rel\vendor-app\releases\0.8.0\vendor-app.boot" "C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\start.boot" 1>nul )
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set taskname="foreground"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>shift /1
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set args=
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>setlocal EnableDelayedExpansion
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set param=
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if "!param!" == ""
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>endlocal &
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if "foreground" == "install"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if "foreground" == "uninstall"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if "foreground" == "start"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if "foreground" == "foreground"
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :pre_configure_hooks
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :execute_hooks pre_configure
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>for /R "C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\hooks\pre_configure.d" %f in (*.bat) do (
%f
)
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :post_configure_hooks
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :execute_hooks post_configure
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>for /R "C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\hooks\post_configure.d" %f in (*.bat) do (
%f
)
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :pre_start_hooks
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :execute_hooks pre_start
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>for /R "C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\hooks\pre_start.d" %f in (*.bat) do (
%f
)
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set EMU=beam
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set PROGNAME=vendor-app
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>start "" /B "C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\bin\erl" -noshell -noinput +Bd -boot "C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\vendor-app" -boot_var ERTS_LIB_DIR "C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\..\lib" -env ERL_LIBS "C:\app\src\backend\_build\prod\rel\vendor-app\lib" -pa "C:\app\src\backend\_build\prod\rel\vendor-app\lib\vendor-app-0.8.0\consolidated" -args_file "C:\app\src\backend\_build\prod\rel\vendor-app\vm.args" -config "C:\app\src\backend\_build\prod\rel\vendor-app\sys.config" -smp enabled -extra
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :set_pid
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :ping 1>NUL
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if 0 GEQ 1 exit 0
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>setlocal EnableDelayedExpansion
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>set get_pid_cmd="C:\app\src\backend\_build\prod\rel\vendor-app\erts-8.3\bin\escript.exe" "C:\app\src\backend\_build\prod\rel\vendor-app\bin\nodetool" eval -name vendor-app@127.0.0.1 -setcookie "!cookie!" "erlang:list_to_integer(os:getpid()).'
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>for /F "delims=" %i in (`%get_pid_cmd%`) do set pid=%i
System nie może odnaleźć pliku `%get_pid_cmd%`.
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>endlocal
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :post_start_hooks
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :execute_hooks post_start
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>for /R "C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\hooks\post_start.d" %f in (*.bat) do (
%f
)
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>tasklist /FI "PID eq " | find /I "erl.exe"
BŁĄD: Nieznany filtr wyszukiwania.
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>if 1 GEQ 1 (call :post_stop_hooks ) else (
)
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>call :execute_hooks post_stop
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>for /R "C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0\hooks\post_stop.d" %f in (*.bat) do (
%f
)
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>goto :eof
C:\app\src\backend\_build\prod\rel\vendor-app\releases\0.8.0>echo %ERRORLEVEL%
1
```
### Description of issue
- What are the expected results?
The app starts and script returns no error and errorlevel 0.
- What OS, Erlang/Elixir versions are you seeing this issue on?
Windows 7 SP1 32-bit Elixir 1.4.4, Erlang 19.
- If possible, also provide your `rel/config.exs`, as it is often
my first troubleshooting question, and you'll save us both time :)
```elixir
# Import all plugins from `rel/plugins`
# They can then be used by adding `plugin MyPlugin` to
# either an environment, or release definition, where
# `MyPlugin` is the name of the plugin module.
Path.join(["rel", "plugins", "*.exs"])
|> Path.wildcard()
|> Enum.map(&Code.eval_file(&1))
use Mix.Releases.Config,
# This sets the default release built by `mix release`
default_release: :default,
# This sets the default environment used by `mix release`
default_environment: Mix.env()
# For a full list of config options for both releases
# and environments, visit https://hexdocs.pm/distillery/configuration.html
# You may define one or more environments in this file,
# an environment's settings will override those of a release
# when building in that environment, this combination of release
# and environment configuration is called a profile
environment :dev do
set dev_mode: true
set include_erts: false
set cookie: :"XXXX"
end
environment :prod do
case :os.type do
{:unix, :linux} ->
# Workaround for distillery_packager's problem with detecting arhitecture.
# It uses uname, which returns machine hardware name, but not architecture
{arch, _ret} = System.cmd("dpkg", ["--print-architecture"])
arch = arch |> String.replace("\n", "")
plugin DistilleryPackager.Plugin, %{architecture: arch}
_ ->
nil
end
set include_erts: true
set include_src: false
set cookie: :"XXXX"
end
# You may define one or more releases in this file.
# If you have not set a default release, or selected one
# when running `mix release`, the first release in the file
# will be used by default
release :'vendor-app' do
set version: current_version(:vendor_app)
set applications: [
:vendor_app,
:runtime_tools
]
end
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Reproduce the release on Windows 7 SP1 with MIX_ENV=prod by running the generated releases\VERSION\APP.bat foreground command. Trace the generated batch file around get_pid_cmd, tasklist, and the foreground startup path; done means the app starts without PID or invalid-filter errors and the command returns a successful errorlevel.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- elixir, shell
- Domain
- release
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100