bitwalker / distillery

Simplify deployments in Elixir with OTP releases!
MIT License
2.96k stars 397 forks source link

How to start a daemon without a shell? #633

Closed derekkraan closed 5 years ago

derekkraan commented 5 years ago

This isn't so much a bug, since this appears to be intentional behaviour.

Anyways, when you run bin/my_app start, distillery proxies that through to bin/my_app console, which starts IEx. The result is that my applications logs are polluted with IEx prompts, which are getting in the way because I am logging to JSON and using filebeat to ship these logs to logstash.

So my question is: now we have remote_console, (which I use all the time), so do we still need start to start a shell that we could connect to? None of the other core functionality of Distillery (eg, stop) uses this if I am reading the code correctly.

So my proposal (or question) is whether we can either change start to not start a shell, or provide a good way (start_daemon or equivalent) to run a shell-less daemon out of the box with Distillery? I would be happy to contribute a PR if I get some guidance on what you'd accept.

bitwalker commented 5 years ago

You should not rely on the erl logs for your application logging, it is not really intended for anything but last resort debugging. Instead you should provide a custom Logger backend that writes to files/syslog/etc.

The use of start fundamentally depends on a shell being attached. If you want the behavior you are looking for, you should use foreground in conjunction with a service manager like systemd which can route stdout/stderr to the appropriate logging facility.