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

问题描述 投票:0回答:1

我编写了一个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)

根据sockets.targetsystemctl status很活跃。我不清楚上面信息中的bad是否真的是一个真正的问题,或者它是否是bug #2348

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

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

systemd
1个回答
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单元。

© www.soinside.com 2019 - 2024. All rights reserved.