Служба сокета Systemd завершилась с ошибкой при наличии разных имен для сокета и службы - PullRequest
0 голосов
/ 20 марта 2020

Я создаю простой сервис эхо-сокетов с различными именами сервисов и сокетов. Могу ли я знать, где я делаю ошибку? Я попытался получить foo@.service, который не работал, и поэтому я переименовал службу в foo.service. Я вижу, что похожий код работает с сокетом и службой, названными одинаково как echo.socket и echo@.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

После запуска сокета с помощью команды systemctl start bar.socket, Статус показывает сокет

$ systemctl status bar.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 
...