Erlang:守护进程“init.d”脚本无法启动

Posted

技术标签:

【中文标题】Erlang:守护进程“init.d”脚本无法启动【英文标题】:Erlang: daemon 'init.d' script fails to start 【发布时间】:2010-11-28 03:23:24 【问题描述】:

我有一个管理 Erlang 守护进程的 python 脚本。系统初始化后,通过 shell 使用时一切正常。

现在,当我在“/etc/init.d”下包含相同的脚本并在“/etc/rcX.d”中正确设置符号链接时,python 脚本仍然可以工作但是我的Erlang 守护进程无法启动并且没有留下明显的痕迹(例如 crash_dump、dmesg 等)

我也尝试通过 'erl -env HOME /root' 设置环境变量“HOME”,但仍然没有成功。

有什么线索吗?

【问题讨论】:

【参考方案1】:

要以与系统相同的方式手动运行脚本,请使用service daemon start(如果您有该命令),否则请尝试

cd /
env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" /etc/init.d/daemon start

这会强制脚本在已知的最小环境中运行,就像它在启动时一样。

【讨论】:

很棒的提示!太感谢了!我能够在一瞬间诊断出问题。似乎 'erl -env HOME /root' 不足以为 erl 设置环境。必须为“erl”本身设置环境变量“HOME”,即在使用 subprocess.Popen() 的 Python 脚本中,必须使用参数“env”来设置完整环境。【参考方案2】:

感谢您的回答 - 我在启动时启动了 rabbitmq 的“Alice”RESTful 接口,这真是太糟糕了。关键是在我的初始化脚本中使用了 'env HOME=/root /path/to/alice/startup/script'。

【讨论】:

以上是关于Erlang:守护进程“init.d”脚本无法启动的主要内容,如果未能解决你的问题,请参考以下文章

Linux下怎么查看某个守护进程或者所有的守护进程?

在 /etc/init.d 脚本中调用守护进程被阻塞,不在后台运行

Linux守护进程详解(init.d和xinetd)

如何在 linux 中将 Perl 脚本作为系统守护进程运行?

启动脚本_《UNIX/LINUX 系统管理技术手册 第四版》

Linux 超级守护进程 xinetd