Эликсир: остановить внешний системный процесс при завершении работы приложения

У нас есть приложение elixir, которое зависит от сервера Tomcat. Наша текущая стратегия заключается в запуске файла .war вызовом System.cmd при запуске приложения. Это работает, но мы также хотели бы выключить сервер, если приложение (или, точнее, GenServer, выполняющий команду запуска) завершает работу. Как я могу поймать выход GenServer и запустить еще один вызов System.cmd перед выходом?


person philosodad    schedule 09.07.2018    source источник


Ответы (1)


Что вам нужно сделать, так это реализовать обратный вызов terminate/2.

Здесь вы даже можете обрабатывать различные типы причин прекращения, такие как :normal, :shutdown или другие самостоятельно определенные причины. Все, что вам нужно, это следующее:

module MyServer do
  use GenServer
  # ...
  def terminate(reason, state) do
    # System call goes here
    System.cmd "echo", ["I'll be back"]
  end
end
person Máté    schedule 10.07.2018