我有一个通过systemd套接字激活运行的C程序。Systemd侦听端口,当TCP连接进入时,应用程序启动,它将stdin/stdout完全像套接字一样处理(即:setsockopt等)。
我试图用围棋中的一个小启动程序来模拟这种行为。它只会被告知监听哪个端口以及连接到哪个端口时运行哪个命令(没有其他高级systemd功能)。
CmdStdinStdout
cmd := exec.Cmd{
Path: cmds,
Args: args,
Stdin: conn.,
Stdout: conn,
Stderr: os.Stderr,
}
err = cmd.Run()
dup(2)
client
在Golang有没有办法做这样的事情?
aditional info
套接字文件大致如下所示
[Unit]
Description=soc activated program
[Socket]
ListenStream=0.0.0.0:10101
Accept=yes
[Install]
WantedBy=sockets.target
相应的单位文件如下所示:
[Unit]
Description=My Program
[Service]
Type=simple
ExecStart=/usr/bin/myprog -N
StandardInput=socket
StandardOutput=socket
StandardError=journal
TimeoutStopSec=5
KillMode=process
[Install]
WantedBy=multi-user.target