bash - 将 erlang shell 作为守护进程/服务运行

标签 bash erlang daemon

显然,我有一个在 Erlang shell 中运行的 Erlang 程序,我想监视它。

这就是我想要的:

  • 当机器启动时,Erlang shell 应该会随之启动,在 shell 中运行的程序也会随之启动。
  • 如果 Erlang shell 由于某种原因崩溃,它应该重新启动。
  • 您应该能够手动启动/停止/重新启动 Erlang shell。

例子:

/etc/init.d/foobar start
/etc/init.d/foobar stop
/etc/init.d/foobar restart

我还没有开始“如果崩溃就自动重启”这件事,被简单的事情困住了,还是很容易?

我所做的是这样的:

从/etc/init.d/skeleton 中获取骨架代码并替换 PATH、DESC、NAME 等...这有效,我可以做到:

/etc/init.d/foobar start

但是,我无法阻止它...问题是我用“erl”启动 Erlang shell,这是一个脚本,可以做一些我不明白的奇特事情。它所做的一件事是,它创建了一个非常长且复杂的进程名称。这不仅仅是“erl”,它就像:

/usr/lib/erlang/erts-5.7.4/bin/beam.smp -- -root/usr/lib/erlang -progname erl -- -home/home/xxx -- ....和一些更多。

有更好的方法吗?

操作系统:Ubuntu 11.04

最佳答案

除了创建目标版本,@Martin 推荐的标准 Erlang 生产环境外,您还需要:

  • 要允许自动重启崩溃的节点,您应该使用 the heart functionality .

  • 要停止正在运行的 Erlang 节点,您可以启动一个临时的 Erlang 节点,连接到正在运行的节点并发出停止命令:

    erl -noshell -sname temp_control \
        -eval "rpc:call(mynode@myhost, init, stop, [])" \
        -s init stop
    
    • noshell 禁用输入和 shell 输出
    • sname 设置临时节点的名称
    • eval 让您执行任何有效的 Erlang 表达式
      • rpc:call(Node, M, F, A) 将调用指定节点上的 M:F(A) (A是将作为实际参数传递给函数的参数列表)
    • s M F 运行函数 M:F()

    (evals 按顺序运行)

关于bash - 将 erlang shell 作为守护进程/服务运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6830806/

相关文章:

regex - 如何将引号中的多行数据恢复为一行?

java - XMPP编程使用erlang还是java?

linux - `make release_tests` 在全新 Erlang 安装中进行 ./configure 后失败

erlang - 如何将字符串列表拆分为 erlang 中给定数量的列表

linux - 如何守护脚本

perl - 守护进程的环境变量

bash - 使用脚本在 shell 中创建命令循环

Linux 按数值排序文件夹

php - 将 SNMP 陷阱数据包传递给 Ubuntu 上的 php 守护进程

android - adb install over usb 不工作