如何转义 systemd 说明符以传递给 ExecStart 中的命令
How to escape a systemd Specifier to pass to the command in ExecStart
我编写了以下 systemd 服务 tcpdumpd.service
来启动持久的 tcpdump 记录。
[Unit]
Description=TCPDumpd
After=multi-user.target network.target
[Service]
Type=simple
ExecStart=/usr/sbin/tcpdump -pni eth0 -s65535 -G 3600 -w '/var/log/tcpdump/trace_%Y-%m-%d_%H:%M:%S.pcap' -z gzip
Restart=on-abort
[Install]
WantedBy=multi-user.target
tcpdump 允许 strftime 占位符,例如 %H 表示小时,%M 表示分钟等等,以允许您创建时间戳文件。
但是,systemd 有特殊的说明符,无法在其中使用,例如 (%n, %N, %p, %i, %U, %u, %m, %H, %b, %v)因此,任何重叠的说明符,如 %m 和 %H 都会传递来自 systemd 的信息,并且不允许将占位符传递给 tcpdump 以制作时间戳。
有谁知道是否有办法在 systemd 中转义说明符,以便我可以将 %m 和 %H 传递给 tcpdump?
我曾尝试转义 %%m
、\%m
等特殊说明符,但没有成功。
但是,如果您需要完成这项工作,这里是解决方法:
创建包含 TCPDUMP_FORMAT 变量定义的文件 tcpdumpd.environment
。
TCPDUMP_FORMAT=%Y-%m-%d_%H:%M:%S
修改tcpdumpd.service
:添加EnvironmentFile=
选项,格式字符串替换为${TCPDUMP_FORMAT}
.
[Unit]
Description=TCPDumpd
After=multi-user.target network.target
[Service]
Type=simple
EnvironmentFile=tcpdumpd.environment
ExecStart=/usr/sbin/tcpdump -pni eth0 -s65535 -G 3600 -w '/var/log/tcpdump/trace_${TCPDUMP_FORMAT}.pcap' -z gzip
Restart=on-abort
[Install]
WantedBy=multi-user.target
Does anyone know if there is a way to escape the specifiers in systemd so I can pass the %m and %H through to tcpdump?
是:%%m
和 %%H
。
"%%" | Single percent sign | Use "%%" in place of "%" to specify a single percent sign.
我编写了以下 systemd 服务 tcpdumpd.service
来启动持久的 tcpdump 记录。
[Unit]
Description=TCPDumpd
After=multi-user.target network.target
[Service]
Type=simple
ExecStart=/usr/sbin/tcpdump -pni eth0 -s65535 -G 3600 -w '/var/log/tcpdump/trace_%Y-%m-%d_%H:%M:%S.pcap' -z gzip
Restart=on-abort
[Install]
WantedBy=multi-user.target
tcpdump 允许 strftime 占位符,例如 %H 表示小时,%M 表示分钟等等,以允许您创建时间戳文件。
但是,systemd 有特殊的说明符,无法在其中使用,例如 (%n, %N, %p, %i, %U, %u, %m, %H, %b, %v)因此,任何重叠的说明符,如 %m 和 %H 都会传递来自 systemd 的信息,并且不允许将占位符传递给 tcpdump 以制作时间戳。
有谁知道是否有办法在 systemd 中转义说明符,以便我可以将 %m 和 %H 传递给 tcpdump?
我曾尝试转义 %%m
、\%m
等特殊说明符,但没有成功。
但是,如果您需要完成这项工作,这里是解决方法:
创建包含 TCPDUMP_FORMAT 变量定义的文件 tcpdumpd.environment
。
TCPDUMP_FORMAT=%Y-%m-%d_%H:%M:%S
修改tcpdumpd.service
:添加EnvironmentFile=
选项,格式字符串替换为${TCPDUMP_FORMAT}
.
[Unit]
Description=TCPDumpd
After=multi-user.target network.target
[Service]
Type=simple
EnvironmentFile=tcpdumpd.environment
ExecStart=/usr/sbin/tcpdump -pni eth0 -s65535 -G 3600 -w '/var/log/tcpdump/trace_${TCPDUMP_FORMAT}.pcap' -z gzip
Restart=on-abort
[Install]
WantedBy=multi-user.target
Does anyone know if there is a way to escape the specifiers in systemd so I can pass the %m and %H through to tcpdump?
是:%%m
和 %%H
。
"%%" | Single percent sign | Use "%%" in place of "%" to specify a single percent sign.