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”脚本无法启动的主要内容,如果未能解决你的问题,请参考以下文章
在 /etc/init.d 脚本中调用守护进程被阻塞,不在后台运行
如何在 linux 中将 Perl 脚本作为系统守护进程运行?