发电机的系统插座单元开始耗尽

时间:2017-12-05 12:46:09

标签: systemd

我编写了一个systemd单元生成器,它生成简单的套接字和服务单元,接受连接并将它们交给systemd-socket-proxyd。在Ubuntu 16.04系统(systemd 229)上,systemctl daemon-reload运行生成器,生成的单元显示在/run/systemd/generator/中:

# cat /run/systemd/generator/sdtcpproxy-127.0.0.1-5555.socket
[Unit]
Description=TCP proxy to 127.0.0.1:5555
Requires=network-online.target
After=network.target network-online.target multi-user.target

[Socket]
ListenStream=127.0.0.1:5500
ListenStream=127.0.0.1:5551

[Install]
WantedBy=sockets.target

(我最初并没有使用RequiresAfter行;我试图确保它在合适的时间开始。我实际上并不认为他们是必要的。)

但他们开始禁用:

 sdtcpproxy-127.0.0.1-5555.socket - TCP proxy to 127.0.0.1:5555
   Loaded: loaded (/run/systemd/generator/sdtcpproxy-127.0.0.1-5555.socket; bad; vendor preset: enabled)
   Active: inactive (dead)
   Listen: 127.0.0.1:5500 (Stream)
           127.0.0.1:5551 (Stream)
根据{{​​1}},

sockets.target处于有效状态。我不清楚上述消息中的systemctl status是否真的是一个真正的问题,或者它是bug #2348

设备上的

bad会生成错误消息systemctl enable。装置上的Failed to execute operation: No such file or directory启动它,它运行得很好。

我做错了什么或遗忘在这里?

1 个答案:

答案 0 :(得分:0)

邮件中的bad不是问题;这只是systemd特定版本中的一个错误。

问题是.socket单元未启用。无法以正常方式启用生成的单位(systemctl enable不查看/run/systemd/generator/或单位文件的类似路径);它必须由生成器本身启用,方法是创建一个适当的.wants子目录,其中包含符号链接到其中的单位,就像systemctl enable对非生成单位一样。所以在这种情况下,让生成器为它创建单元和符号链接:

/run/systemd/generator/sdtcpproxy-127.0.0.1-5555.socket
/run/systemd/generator/socket.target.wants/sdtcpproxy-127.0.0.1-5555.socket
    -> /run/systemd/generator/sdtcpproxy-127.0.0.1-5555.socket

当您的系统启动或您执行systemctl daemon-reload systemd时,将启动将接听的套接字单元,并在收到第一个连接时启动.service单元。