我正在尝试让Monit/init.d脚本在几个不同的服务器上运行,并在Ubuntu服务器上为几个不同的进程运行。
- 试图让斯芬克斯在重新启动时启动,并与莫尼特合作
- 尝试让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
感谢那些评论试图帮助我的人!