本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
systemd-socket-activate — 测试基于套接字启动的守护进程
systemd-socket-activate
[OPTIONS...] daemon
[OPTIONS...]
systemd-socket-activate 用于测试启动基于套接字启动的服务进程。 还可用于针对单个连接启动单独的服务进程实例。
可以通过 daemon
之后的 [OPTIONS...]
给要启动的服务进程传递命令行选项。
如果使用了 --inetd
选项,那么 socket 文件描述符将被用作被调用进程的标准输入与标准输出。
否则,将继承现有的标准输入与标准输出,而 socket 将被作为3号或更高的文件描述符。
通过 $LISTEN_FDS
传递给 systemd-socket-activate 的 socket 将会被直接传递给被调用的进程,
通过 --listen=
指定的其他 socket 将会使用连续描述符(consecutive descriptor)。
systemd-socket-activate 默认在流式套接字(stream socket)上监听,
但是可以使用 --datagram
选项改为在数据报套接字(datagram socket)上监听,
或者使用 --seqpacket
选项改为在顺序包套接字(sequential packet socket)上监听。
-l address
, --listen=address
¶在指定的 address
上监听。
接受一个类似 "2000
"(端口) 或
"127.0.0.1:2001
"(地址:端口) 这样的字符串。
-a
, --accept
¶为每个连接启动一个服务进程实例, 并传递连接套接字。
-d
, --datagram
¶在数据报套接字(SOCK_DGRAM
)上监听,而不是默认的流式套接字(SOCK_STREAM
)。
不能与 --seqpacket
同时使用。
--seqpacket
¶在顺序包套接字(SOCK_SEQPACKET
)上监听,而不是默认的流式套接字(SOCK_STREAM
)。
不能与
--datagram
同时使用。
--inetd
¶使用 inetd 协议传递文件描述符,也就是作为标准输入与标准输出,
而不是新式的使用 $LISTEN_FDS
变量来传递文件描述符。
-E VAR
[=VALUE
]
, --setenv=VAR
[=VALUE
]
¶向被调用的进程传递环境变量。
如果在 VAR
后面
紧跟着 "=
" 符号,
那么会将其视为"变量=值"的结构。
否则表示将 systemd-socket-activate 所拥有的同名变量传递过去。
--fdname=
NAME
[:NAME
…]¶指定要传递的文件描述符名称。
这等价于在单元文件中设置 FileDescriptorName=
并且启用
sd_listen_fds_with_names(3) 。
可以多次使用此选项以指定多个描述符,也可以在同一个选项中使用冒号分隔多个描述符。
如果给出的名字多于文件描述符的个数,那么多出的名字将会被忽略。
如果给出的名字少于文件描述符的个数,那么多出的文件描述符将被视为未命名的。
-h
, --help
¶--version
¶$LISTEN_FDS
, $LISTEN_PID
, $LISTEN_FDNAMES
¶参见 sd_listen_fds(3) 手册。
$SYSTEMD_LOG_TARGET
, $SYSTEMD_LOG_LEVEL
, $SYSTEMD_LOG_COLOR
, $SYSTEMD_LOG_LOCATION
¶与 systemd(1) 中的含义相同。
例 2. 运行一个基于套接字启动的 systemd-journal-gatewayd 实例
$ systemd-socket-activate -l 19531 /usr/lib/systemd/systemd-journal-gatewayd