为什么我的 Erlang 引导脚本可以从控制台运行,但从 init 系统(sysvinit、upstart、systemd)运行时却不起作用?

Shn*_*sel 5 unix linux erlang daemon systemd

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

/usr/bin/erl -boot /path/to/my-boot-script
Run Code Online (Sandbox Code Playgroud)

从控制台运行时它可以工作,但是当我从 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
Run Code Online (Sandbox Code Playgroud)

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

Shn*_*sel 4

结果你必须将-noinput参数传递给erl。否则,它将尝试打开标准输入进行读取,但会失败,因为那里没有任何内容,并在没有任何错误消息的情况下终止。

这有效:

[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
Run Code Online (Sandbox Code Playgroud)