Переместите socat init сценарий к systemd

Это означало бы это, если произведено для which не относится к терминалу, затем не обрабатывайте --read-alias, --show-dot и --show-tilde.

Обычно, если к каналу, обычный файл и т.д.

which watch | foo # not a tty
which watch > foo # not a tty
which watch       # tty
which watch >&2   # tty

Опции не распознаны под, например, debian:

8
18.04.2014, 15:21
2 ответа

Только что выяснил, что мне нужно использовать

Type=forking

, как описано в http://www.freedesktop.org/software/systemd/man/systemd.service.html .

Если задано разветвление, ожидается, что процесс, настроенный с помощью ExecStart =, вызовет fork () как часть своего запуска. Ожидается, что родительский процесс завершится после завершения запуска и настройки всех каналов связи . Потомок продолжает работать как главный процесс-демон . Это поведение традиционных демонов UNIX. Если используется этот параметр, рекомендуется также использовать параметр PIDFile = , чтобы systemd могла идентифицировать основной процесс демона. {{ 1}} systemd продолжит запуск последующих модулей, как только родительский процесс завершится.

8
27.01.2020, 20:12

Для socat я использую чистый systemd подход. Это пример последовательного шлейфа :

.
[Unit]
Description=Socat Serial Loopback
#Before=my-other.service

[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=socat-serial-lo

ExecStart=/usr/bin/socat -d -d pty,raw,echo=0,link=/tmp/seriallo-a pty,raw,echo=0,link=/tmp/seriallo-b
Restart=always

[Install]
WantedBy=multi-user.target

Это можно записать в/etc/systemd/system/socat-serial-lo.service(в Ubuntu 16.04+ ), а затем:

systemctl daemon-reload
systemctl start socat-serial-lo
systemctl enable socat-serial-lo  # (to start it during bootup)

Одним из преимуществ этого метода является то, что командную строку, определенную в ExecStart, можно протестировать непосредственно из командной строки без изменений.для проверки команды.

2
27.01.2020, 20:12

Теги

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