Как создать службу в Linux, которая может обрабатывать запросы?

Я построил следующую sedкоманду:

$ sed '/^Node-path: branches\//s/Node-path: branches\/\([-A-Za-z0-9]*\) \
   \([-A-Za-z0-9]*\)/Node-path: branches\/\1_\2/' < sedtest

Он выглядит большим и уродливым, но в данной ситуации работает.

Обратите внимание, что это не исправляет несколько вхождений пробела в имени ветки, только одно (, поэтому я повторно -запущу команду, если мне нужно ).


Кстати, если вы делаете это для исправления дампа SVN, не забудьте таким же образом исправить строки Node-copyfrom-path:.

0
10.08.2020, 20:57
1 ответ

Я думаю, что ответ, который вы ищете, это использовать systemd.socket

Допустим, у меня есть программа, которая читает стандартный ввод и записывает в стандартный вывод. Вы можете настроить systemd, чтобы сделать это доступным через сокет.

Вот пример настройки systemd для этого:

# /etc/systemd/system/simple.socket
[Socket]
Accept=yes
ListenStream=11111

# /etc/systemd/system/simple@.service
[Unit]
Description="Simple service"
After=network.target simple.socket
Requires=simple.socket

[Service]
Type=simple
ExecStart=-cat -
StanardInput=socket
StandardOutput=socket

Затем запустите сокет с помощью:

$ sudo systemctl start simple.socket

Теперь вы можете запустить службу, установив сокет. Я использую ncили netcatдля этого:

$ nc 127.0.0.1 11111

В ExecStartя решил использовать cat -, который просто ретранслирует stdin на stdout. Когда мы запустим nc, мы обнаружим, что все, что мы вводим в стандартный ввод, будет возвращено нам через стандартный вывод. Вероятно, у вас есть более интересное приложение, которое вы захотите запустить.

Еще несколько интересных моментов:

  • catне работает, если у вас нет открытого сокета (сокет прослушивается, но служба остановлена ​​).
  • Когда вы устанавливаете соединение, служба запускается
  • Если вы устанавливаете другое соединение, запускается другой экземпляр службы.
  • При закрытии соединения служба останавливается.
3
18.03.2021, 23:13

Теги

Похожие вопросы