LINUX.ORG.RU

systemd socket, что-то пошло не так.

 , ,


0

0

В связи со сменой дистрибутива, пытаюсь заменить inetd на сервис сокетов от systemd.

bforce-binkp.service

[Service]
ExecStart=/home/fido/BinkleyForce/bforce -C/home/fido/BinkleyForce/bforce.conf binkp
StandardInput=socket
User=fido

bforce-binkp.socket

[Install]
WantedBy=sockets.target

[Socket]
Accept=yes
ListenStream=24554

# [Unit]
# After=bforce.service
# Requires=bforce.service

При попытки подключения к порту получаю вот такое сообщение:

systemctl status bforce-binkp.socket

● bforce-binkp.socket#
   Loaded: loaded (/etc/systemd/system/bforce-binkp.socket; enabled; vendor preset: disabled)
   Active: failed (Result: resources) since Thu 2018-10-04 12:51:18 EEST; 9min ago
   Listen: [::]:24554 (Stream)
 Accepted: 1; Connected: 0;

окт 04 12:47:55 antares systemd[1]: Listening on bforce-binkp.socket.
окт 04 12:51:18 antares systemd[1]: bforce-binkp.socket: Failed to queue service startup job (Maybe the service file is missing or not a template unit?): Invalid argument
окт 04 12:51:18 antares systemd[1]: bforce-binkp.socket: Failed with result 'resources'.

Maybe the service file is missing or not a template unit?

очевидно, что systemd просит сделать `bforce-binkp.service` шаблоном, т.е. переименовать его в `bforce-binkp@.service`. Это нужно из-за параметра `Accept=yes`, требующего запускать отдельные копии юнита на каждое соединение (что сделано как раз для совместимости с inetd)

anonymous
()
Ответ на: комментарий от anonymous

очевидно, что systemd просит сделать `bforce-binkp.service` шаблоном, т.е. переименовать его в `bforce-binkp@.service`. Это нужно из-за параметра `Accept=yes`, требующего запускать отдельные копии юнита на каждое соединение (что сделано как раз для совместимости с inetd)

Спасибо, заработало. И еще вопрос, с позволения.

[Unit]
After=bforce.service
Requires=bforce.service

Нужно расположить в .service или в .socket?

Xoomoh
() автор топика
Ответ на: комментарий от intelfx

Это другой сервис, не тот с которым связан сокет непосредственно. bforce-binkp.service и bforce.service они разные.

Xoomoh
() автор топика
Ответ на: комментарий от Xoomoh

А, это вообще другой сервис.

Тогда

bforce-binkp.socket:

[Unit]
After=bforce.service
BindsTo=bforce.service

Но тебе точно нужно именно это? Расскажи исходную задачу, которую ты решаешь.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Спасибо! То что нужно, работает.

Но тебе точно нужно именно это?

Да, это именно то что нужно. Еще раз спасибо.

Расскажи исходную задачу, которую ты решаешь.

bforce.service запускает демон, который может совершать исходящие соединения, но не умеет открывать сокет и принимать их. Вернее умеет, но при помощи inetd для ip соединений и mgetty для модемных. bforce-binkp.socket вмсесте с соответствующим сервисом принимают входящие соединения. Если демон не запустился или перестал работать по какой-то причине, отвечать на входящие смысла не имеет.

Xoomoh
() автор топика
Ответ на: комментарий от Xoomoh

У тебя в такой конструкции не случится состояния гонки, когда bforce.service запустился, исходящих соединений понаоткрывал, а сокет для входящих соединений ещё не создался?

Зависимости между юнитами должны отражать их семантику. Если между bforce.service и bforce-binkp.service нет фактического взаимодействия (IPC), то и зависимостей никаких делать не нужно.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

У тебя в такой конструкции не случится состояния гонки, когда bforce.service запустился, исходящих соединений понаоткрывал, а сокет для входящих соединений ещё не создался?

Программа BinkleyForce очень старая, еще из эпохи модемных соединений. Поэтому в современном мире такой алгоритм работы может выглядеть не очеь адекватно. Но с помощью форумчан сейчас все работает так как нужно. Еще раз спасибо!

Xoomoh
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.