我正在尝试在ubuntu上构建一个脚本来启动我的一些Erlang代码:
脚本类似于:
#!/bin/sh
EBIN=$HOME/path_to_beams
ERL=/usr/local/bin/erl
export HEART_COMMAND="$EBIN/starting_script start"
case $1 in
start)
$ERL -sname mynode -pa $EBIN \
-heart -detached -s my_module start_link
;;
*)
echo "Usage: $0 {start|stop|debug}"
exit 1
esac
exit 0
但我遇到了一些问题。
首先,只有当脚本与光束位于同一目录时才能执行代码,这对我来说很奇怪,我仔细检查了路径,为什么-pa标志不起作用?
其次,脚本(没有-pa)工作正常,但是如果我尝试启动而不是主模块(gen_server)它的主管(-s my_module_sup start_link)它不起作用......这很奇怪,因为如果我从普通shell启动主管,一切正常。
第三,-heart标志应该在发生故障的情况下重新启动脚本,但如果我用正常的Unix kill杀死进程,则不会重启该进程。
有人可以给我一些提示吗?
提前致谢,
PDN
答案 0 :(得分:1)
首先想到的是,您使用的是erlexport
而不是erl
。不确定你为什么要这样做(我之前没有听说过erlexport
)。请尝试使用erl
。
如果Erlang节点本身被杀死,那么-heart
标志将没有意义,因为该进程无法保持活动状态。您需要运行另一个监视Erlang进程的进程,并在被杀死时重新启动它。