用于Elixir/Phoenix和Spinx/searchd的Monit/init.d



我正在尝试让Monit/init.d脚本在几个不同的服务器上运行,并在Ubuntu服务器上为几个不同的进程运行。

  1. 试图让斯芬克斯在重新启动时启动,并与莫尼特合作
  2. 尝试让Elixir/Phoenix mix phx.server在重新启动时启动并使用Monit
  • 当我运行monit-t时,我没有看到任何错误

对于长生不老药:

  • 以部署用户角色登录时,我手动运行/etc/init.delixir启动-进程开始得很好
  • 当作为部署用户角色登录时,我手动运行sudo monit启动elxir,但什么都没发生
  • 当我重新启动机器时,应用程序没有启动
  • 我正试图记录init.d脚本的结果,但没有看到任何输出

对于搜索:

  • 以部署用户角色登录时,我手动运行/etc/init.d sphinx启动-该过程启动得很好

  • 当作为部署用户角色登录时,我手动运行sudo monit start sphinx,但什么都没发生。。。

  • 当我重新启动机器时,应用程序没有启动

  • 我正试图记录init.d脚本的结果,但没有看到输出

  • init.d脚本是可执行的

  • 我试过这个命令,我读到它可以确保脚本在重新启动时注册运行:sudo update rc.d start_sphinx defaults

Elixir监控脚本示例:

example monit script:
check process api matching "mix phx.server"
start program = "/etc/init.d/elixir start" as uid deploy and gid deploy
stop program = "/etc/init.d/elixir stop" as uid deploy and gid deploy

Elixir init.d脚本示例:

#!/bin/bash
# chkconfig: 2345 20 80
# description: Elixir API
# Source function library.
#. /etc/init.d/functions
start() {
cd /home/deploy/apps/api && PORT=8888 MIX_ENV=prod elixir --erl "-detached" -S mix phx.server > /home/deploy/elixir_init_d_start.log 2>&1
}
stop() {
pkill -f 'mix phx.server'
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0

我从未在现有设置中使用过上述脚本,但我发现有效的是:我将Phoenix从1.3升级到1.6,现在使用Phoenix/Elixir版本。

我的部署过程现在看起来是这样的:

git push server
{login to server}
cd apps
rm -rf api
mkdir api
cd api
git clone --shared ../new_deploy_method . 
cd config
vi prod.secret.exs
{copy local config/prod.secret.exs}
cd ../
mix deps.get --only prod
MIX_ENV=prod mix compile
mix phx.gen.release
MIX_ENV=prod mix release
_build/prod/rel/my_app/bin/my_app daemon

现在我的init.d脚本看起来是这样的:

#!/bin/bash
# chkconfig: 2345 20 80
# description: Elixir API
# Source function library.
#. /etc/init.d/functions
start() {
/home/deploy/apps/api/_build/prod/rel/ckdu_site_api/bin/ckdu_site_api daemon > /home/deploy/elixir_init_d_start.log 2>&1
}
stop() {
/home/deploy/apps/api/_build/prod/rel/ckdu_site_api/bin/ckdu_site_api stop > /home/deploy/elixir_init_d_start.log 2>&1
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0

我的monit脚本现在看起来是这样的:

check process api matching "beam"
start program = "/etc/init.d/elixir start" as uid deploy and gid deploy
stop program = "/etc/init.d/elixir stop" as uid deploy and gid deploy

感谢那些评论试图帮助我的人!

最新更新