首页 > 解决方案 > 当套接字和服务的名称不同时,Systemd 套接字服务失败并出现错误

问题描述

我正在创建一个具有不同服务和套接字名称的简单回显套接字服务。我可以知道我在哪里犯了错误吗?我尝试让 foo@.service 不起作用,因此我将服务重命名为 foo.service。我看到类似的代码适用于与echo.socketecho@.service名称相同的套接字和服务

$ systemctl cat bar.socket

# /etc/systemd/system/bar.socket
#bar socket
[Unit]
Description=bar socket

[Socket]
ListenStream=22223
Accept=yes

$ systemctl cat foo.service

#Foo service
[Unit]
Description=foo service

[Service]
ExecStart=-/bin/cat
StandardInput=socket
Sockets=bar.socket

用命令启动socket后systemctl start bar.socket,status show socket

$ systemctl 状态栏.socket

● bar.socket - bar socket
   Loaded: loaded (/etc/systemd/system/bar.socket; static; vendor preset: enabled)
   Active: active (listening) since Thu 2020-03-19 20:20:00 PDT; 17s ago
   Listen: [::]:22223 (Stream)
 Accepted: 7; Connected: 0
    Tasks: 0 (limit: 2318)
   CGroup: /system.slice/bar.socket
Mar 19 20:20:00 ubuntu systemd[1]: Listening on bar socket.

一旦我运行命令

socat - TCP:127.0.0.1:22223

套接字崩溃,当我检查状态时看到下面的错误。

* 错误 - $ systemctl status bar.socket *

● bar.socket - bar socket
   Loaded: loaded (/etc/systemd/system/bar.socket; static; vendor preset: enabled)
   Active: failed (Result: resources) since Thu 2020-03-19 20:17:59 PDT; 1min 19s ago
   Listen: [::]:22223 (Stream)
 Accepted: 7; Connected: 0

Mar 19 20:17:12 ubuntu systemd[1]: Listening on bar socket.
Mar 19 20:17:59 ubuntu systemd[1]: bar.socket: Failed to queue service startup job (Maybe the service file is missing or not a template unit?): Invalid argument
Mar 19 20:17:59 ubuntu systemd[1]: bar.socket: Failed with result 'resources'.

$ systemctl cat echo.socket

# /etc/systemd/system/echo.socket
#echo socket
[Unit]
Description=echo socket

[Socket]
ListenStream=22222
Accept=yes

$ systemctl cat echo@.service

# /etc/systemd/system/echo@.service
#Echo service
[Unit]
Description=echo service

[Service]
ExecStart=-/bin/cat
StandardInput=socket 

标签: linuxsystemd

解决方案


推荐阅读