bitwalker / bitwalker/distillery

Starting in foreground mode on windows fails to get PID and returns errorlevel 1

Open
#348 23 comments 0 reactions 0 assignees View on GitHub
deployment:scripts help-wanted os:windows
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.