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

2024-05-04

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

这就是我要的:

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

Example:

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

我还没有开始整个“如果崩溃就重新启动”的事情,陷入了简单的事情,或者这很容易吗?

我所做的是这样的:

从 /etc/init.d/sculpture 中获取骨架代码并替换 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 生产环境)之外,您还需要以下内容:

  • 为了允许自动重新启动崩溃的节点,您应该使用心脏功能 http://www.erlang.org/doc/man/heart.html.

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

    erl -noshell -sname temp_control \
        -eval "rpc:call(mynode@myhost, init, stop, [])" \
        -s init stop
    
    • noshell禁用输入和 shell 输出
    • sname设置临时节点的名称
    • eval let's you execute any valid Erlang expression
      • rpc:call(Node, M, F, A)将会通知M:F(A)在指定的节点上(A是将作为实参传递给函数的参数列表)
    • s M F运行函数M:F()

    (eval and s按顺序运行)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 erlang shell 作为守护进程/服务运行 的相关文章

  • 在Unix下,判断执行该程序的用户是否是root?

    我正在编写一个 rake 脚本 并希望检测 如果可能的话 使用 Ruby 而不是 bash 执行 rake 脚本的用户是否具有 root 权限 如果它不是 root 那么我想终止脚本 Use uid http www ruby doc or
  • bash 脚本中的 JQ 参数错误

    我的 JQ 查询有问题 max script lt return integer jq r notifiestext map select read false temp notif jq arg foo max map select id
  • 如何按照文档规定的方式使用 python-daemon?

    我正在尝试用 python 创建一个守护进程 并且遇到了 python daemon 包 有趣的是 我见过的最常见的使用方式甚至不是文档 https www python org dev peps pep 3143 非常稀疏 告诉你要做的
  • 如何 grep 文件中不区分大小写的字符串?

    我有一个文件file1其结尾为Success OR success 我想要grep为了这个词success以一种不区分大小写的方式 我写了以下命令 但它区分大小写 cat file1 grep success 我怎样才能改变它 以便它ret
  • 如何使用 logger 命令记录到 Linux 中的特定文件?

    我将运行以下脚本 bin bash myprogram get exit code exitvalue log exit code value to var log messages logger s exit code of my pro
  • 如何在 JS 文件中使用 Github 机密

    我有一个基本的 git 存储库 其中包含用于构建和部署的 github 操作 主要是 HTML 和 TS 文件 但是我必须在一些需要保密的 API 密钥中使用 所以我想办法为他们使用 GITHUB SECRETS 如何在我的 js 或 TS
  • Jenkins 文本参数 - 特殊字符乱码(不需要的变量替换)

    我在 Jenkins Linux 下 有一份工作构建参数 https wiki jenkins ci org display JENKINS Parameterized Build类型为 文本 我使用参数来形成在构建过程中使用的文件的内容
  • 如何在 Vim 中突出显示 Bash 脚本?

    我的 Vim 编辑器自动突出显示 PHP 文件 vim file php HTML 文件 vim file html 等等 但是当我输入 vim file在里面写一个Bash脚本 它不会突出显示它 我如何告诉 Vim 将其突出显示为 Bas
  • 大括号语法 ${var%.*} 是什么意思?

    我正在查看一些旧代码并遇到了以下语法 extractDir downloadFileName tmp 我发现搜索的唯一信息是指命令列表 但这只是一个变量 这个大括号语法在 bash 中意味着什么 在这种背景下 它是一个参数替换 http w
  • 向后台进程发送命令

    我有一个先前运行的进程 process1 sh 它正在后台运行 PID 为 1111 或其他任意数字 我怎样才能发送类似的东西command option1 option2PID 为 1111 的进程 I don t想要启动一个新的proc
  • Bash:将字符串添加到文件末尾而不换行

    如何将字符串添加到文件末尾而不换行 例如 如果我使用 gt gt 它将添加到文件末尾并换行 cat list txt yourText1 root host 37 echo yourText2 gt gt list txt root hos
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • Erlang:查找我的 IP 地址

    我正在尝试使用 Redis 完成负载均衡器 登录服务器 游戏服务器的某些部分设置 负载均衡就是其中之一 在我的 Redis 负载平衡实例中 我使用有序集 关键是应用程序名称 成员是游戏服务器的 IP 地址 这就是我的问题 我想在 erlan
  • 检查 bash 中是否存在关联数组元素

    在 bash 脚本中 我在变量中有一个区域设置 如下所示 locale fr ma 我也有一个像这样的关联数组 declare A new loc map new loc fr ma en ma new loc el gr en gr ne
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • 使用 SIGINT 默认处理程序时从 system() 返回值

    我遇到了一些奇怪的返回值system 当子进程从终端接收到 SIGINT 时 解释一下 从 Perl 脚本parent pl I used system 运行另一个 Perl 脚本作为子进程 但我还需要通过 shell 运行子进程 所以我使
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r

随机推荐