我有一个通过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