2016-11-10 47 views
2

我已經編寫了以下systemd服務tcpdumpd.service以啓動持久tcpdump記錄。如何轉義systemd指定符以傳遞給ExecStart中的命令

[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是分等等,讓您創建時間戳的文件。 (%n,%N,%p,%i,%U,%u,%m,%H,%b,%v)所以,systemd具有特殊的說明符,可以在其中使用。任何重疊的說明符(如%m和%H)會傳遞systemd中的信息,並且不允許將佔位符傳遞給tcpdump以創建時間戳。

有誰知道是否有辦法在systemd中轉義說明符,以便我可以將%m和%H傳遞給tcpdump?

回答

5

我試圖逃過像%%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 
+0

這是解決方案。找到[這個答案](http://stackoverflow.com/questions/28881758/how-can-i-use-spaces-in-systemd-command-line-arguments?rq=1),讓我到你的確切解決方案。謝謝! –

+1

對於'systemd'版本215,你可以使用'Environment =「TCPDUMP_FORMAT = %% Y - %% m - %% d - %% H:%% M:%% S - ''而不是'EnvironmentFile'。 –

相關問題