gpt4 book ai didi

tcpdump - 如何转义 systemd 说明符以传递给 ExecStart 中的命令

转载 作者:行者123 更新时间:2023-12-02 10:35:38 25 4
gpt4 key购买 nike

我编写了以下 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=选项,并将格式字符串替换为${TCPPDUMP_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

关于tcpdump - 如何转义 systemd 说明符以传递给 ExecStart 中的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40532499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com