系统套接字激活标准输入

巴纽斯

我必须将旧的xinetd配置转移到systemd。要求是打开一个tcp端口并监听传入的传输。应用程序只需将每个端口连接到端口即可将每个连接传输一个文件。注册传输时,将调用Shell脚本,该脚本通过将stdin重定向到该文件中来将传入的数据保存到文件中。这种结构与xined一起工作了多年。这是我所拥有的:

[[email protected] ~]# cat /etc/systemd/system/foo.socket
[Unit]
Description=Foo Socket
PartOf=foo.service

[Socket]
ListenStream=127.0.0.1:9999
Accept=yes

[Install]
WantedBy=sockets.target
[[email protected] ~]# cat /etc/systemd/system/[email protected]
[Unit]
Description=Foo Service
After=network.target foo.socket
Requires=foo.socket

[Service]
Type=simple
ExecStart=/usr/local/bin/foo.sh
TimeoutStopSec=5

[Install]
WantedBy=default.target
[[email protected] ~]# cat /usr/local/bin/foo.sh
#!/bin/bash

cat > /tmp/foo.$$
[[email protected] ~]# systemctl start foo.socket
[[email protected] ~]# echo "Hello World" > testfile
[[email protected] ~]# socat -u FILE:testfile TCP:127.0.0.1:9999
[[email protected] ~]# ls -al /tmp/foo.*
-rw-r--r--. 1 root root 0 Nov  7 21:20 /tmp/foo.19820
[[email protected] ~]#

tcp端口打开,服务被调用并执行shell脚本。但是输出文件的大小为零。如果我停止套接字并使用此命令:

[[email protected] system]# systemctl stop foo.socket
[[email protected] system]# /usr/lib/systemd/systemd-activate -l 127.0.0.1:9999 -a /usr/local/bin/foo.sh &
[1] 19833
[[email protected] system]# Listening on 127.0.0.1:9999 as 3.
[[email protected] ~]# socat -u FILE:testfile TCP:127.0.0.1:9999
Communication attempt on fd 3.
Connection from 127.0.0.1:39924 to 127.0.0.1:9999
Spawned /usr/local/bin/foo.sh (/usr/local/bin/foo.sh) as PID 19840
[[email protected] ~]# Child 19840 died with code 0
[[email protected] ~]# ls -al /tmp/foo*
-rw-r--r--. 1 root root   12 Nov  7 21:26 /tmp/foo.19840
[[email protected] ~]# cat /tmp/foo.19840
Hello World
[[email protected] ~]#

它像预期的那样工作。我想念什么?

巴纽斯

知道了。服务单元文件需要选项StandardInput = socket才能接受来自套接字的数据。完整的文件应如下所示:

# cat /etc/systemd/system/[email protected] 
[Unit]
Description=Foo Service
After=network.target foo.socket
Requires=foo.socket

[Service]
Type=simple
ExecStart=/usr/local/bin/foo.sh
TimeoutStopSec=5
StandardInput=socket

[Install]
WantedBy=default.target

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

蟒蛇。将标准输出重定向到套接字

来自分类Dev

套接字是否集成到C ++标准中?

来自分类Dev

丢弃来自套接字的输入

来自分类Dev

使套接字等待来自JTextArea的输入

来自分类Dev

TCP客户端套接字。连接并等待输入流

来自分类Dev

用systemd激活套接字没有数据

来自分类Dev

使用systemd套接字激活启动Docker容器吗?

来自分类Dev

如何使用系统默认套接字实现SocketImplFactory

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

Java:套接字未获取输入

来自分类Dev

“套接字”系统调用中的“ SOCK_RAW”选项

来自分类Dev

UDP守护程序的systemd-activate套接字激活

来自分类Dev

套接字发送在终端中输入的数据

来自分类Dev

如何在Python中修改或扩展标准套接字类?

来自分类Dev

QT套接字等待用户输入

来自分类Dev

Debian系统上基于文件的套接字的惯用位置

来自分类Dev

Python。将标准输出重定向到套接字

来自分类Dev

Netty使用标准套接字获得响应

来自分类Dev

将用户输入的主机添加到套接字,同时对套接字使用单例

来自分类Dev

如何使用系统默认套接字实现SocketImplFactory

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

Systemd套接字激活触发bash脚本

来自分类Dev

systemd“套接字激活”与xinetd

来自分类Dev

找不到SSHD /系统套接字激活日志

来自分类Dev

Systemd套接字激活:关闭套接字时杀死bash脚本

来自分类Dev

读取套接字的输入流

来自分类Dev

无法在系统服务中打开套接字

来自分类Dev

将系统日志文件导入本地套接字

来自分类Dev

如何使用套接字安全地实现通知系统?

Related 相关文章

热门标签

归档