繁体   English   中英

为什么我的Erlang启动脚本在控制台上运行,但从init系统(sysvinit,upstart,systemd)运行时不起作用?

[英]Why does my Erlang boot script work from console but does not work when run from init system (sysvinit, upstart, systemd)?

我有一个Erlang启动脚本,我可以像这样启动:

/usr/bin/erl -boot /path/to/my-boot-script

它从控制台运行时有效,但是当我从systemd运行它时失败而没有任何错误消息。 systemd单元文件如下所示:

[Unit]
Description=My daemon written in Erlang

[Service]
Type=simple
ExecStart=/usr/bin/erl -boot /path/to/my-boot-script
Restart=always

[Install]
WantedBy=multi-user.target

日志显示系统正常引导,然后突然终止,没有任何类型的错误消息。 这到底是怎么回事?

原来你必须将-noinput参数传递给erl。 否则它将尝试打开stdin进行读取,失败因为没有任何内容并且没有任何类型的错误消息而终止。

这有效:

[Unit]
Description=My daemon written in Erlang

[Service]
Type=simple
ExecStart=/usr/bin/erl -noinput -boot /path/to/my-boot-script
Restart=always

[Install]
WantedBy=multi-user.target

我刚刚设法使用带有systemd的erlang安装系统来安装代码库。 此过程符合有关设置嵌入式系统的erlang文档。 这是我学到的:

1)需要添加路径以获取erts / examples中的安装工具。 以下是我的.erlang文件的摘录:

code:add_path(filename:join([os:getenv("ROOTDIR"),"lib/sasl-2.6/examples/ebin"])).

2)在erlang / doc / system_principles / create_target.html中进行构建

target_system:create("mysystem").

3)将构建提取到临时位置。 对于我的应用程序,它是从erlang完成的:

target_system:install("code_repository", "/home/tony/Projects/code_repository/release_test").

4)编辑它开始的最后一行开始运行erl并删除-daemon选项并添加所需的任何erlang运行时参数,如-sname或-set_cookie。 这在erlang / doc / embedded / embedded_solaris.html#idm45326372314928中列出。 这是我系统中编辑过的行:

$ROOTDIR/bin/run_erl  /tmp/ $ROOTDIR/log "exec $ROOTDIR/bin/start_erl $ROOTDIR $RELDIR $START_ERL_DATA -sname code_repository" 

5)安装到运行时位置(不要忘记sys.config)
6)如下设置.services文件。 该文件存储在/etc/systemd/system/code_repository.service中:

[Unit]
Description=Tonys Code Repository Daemon

[Service]
Type=simple
WorkingDirectory=/var/opt/code_repository
Environment=HOME=/var/opt/code_repository
ExecStart=/var/opt/code_repository/bin/start
Restart=yes

[Install]
WantedBy=multi-user.target

删除-daemon标志对于作为简单服务运行至关重要,因为简单服务运行并且除非它们失败否则不返回。 在此过程中使用run_erl允许erlang工具附加到守护程序以进行维护。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM