วิธีหลีกเลี่ยง systemd Specifier เพื่อส่งผ่านไปยังคำสั่งใน ExecStart

ฉันได้เขียน systemd service ต่อไปนี้ 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-placeholder เช่น %H สำหรับชั่วโมง, %M สำหรับนาที และอื่นๆ เพื่อให้คุณสามารถสร้างไฟล์ประทับเวลาได้

อย่างไรก็ตาม systemd มีตัวระบุพิเศษที่สามารถใช้ได้ เช่น (%n, %N, %p, %i, %U, %u, %m, %H, %b, %v) ดังนั้นตัวระบุใดๆ ก็ตาม ที่ทับซ้อนกัน เช่น %m และ %H ส่งผ่านข้อมูลจาก systemd และไม่อนุญาตให้ตัวยึดตำแหน่งถูกส่งผ่านไปยัง tcpdump เพื่อทำการประทับเวลา

ไม่มีใครรู้ว่ามีวิธีที่จะหลบหนีตัวระบุใน systemd เพื่อให้ฉันสามารถส่ง %m และ %H ไปยัง tcpdump ได้หรือไม่


person Ben Sooter    schedule 10.11.2016    source แหล่งที่มา


คำตอบ (2)


ฉันพยายามหลีกเลี่ยงตัวระบุพิเศษเช่น %%m, \%m โดยไม่มีโชค

แต่ถ้าคุณต้องการงานให้เสร็จ นี่คือวิธีแก้ปัญหา:

สร้างไฟล์ tcpdumpd.environment ที่มีคำจำกัดความของตัวแปร TCPDUMP_FORMAT

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
person alexander    schedule 10.11.2016
comment
นี่คือวิธีแก้ปัญหา พบคำตอบนี้ที่ พาฉันไปสู่วิธีแก้ปัญหาที่แน่นอนของคุณ ขอบคุณ! - person Ben Sooter; 10.11.2016
comment
ด้วย systemd เวอร์ชัน 215 คุณสามารถใช้ Environment="TCPDUMP_FORMAT=%%Y-%%m-%%d_%%H:%%M:%%S" แทน EnvironmentFile ได้ - person Iskren; 22.06.2017

ไม่มีใครรู้ว่ามีวิธีที่จะหลบหนีตัวระบุใน systemd เพื่อให้ฉันสามารถส่ง %m และ %H ไปยัง tcpdump ได้หรือไม่

ใช่: %%m และ %%H

ดู man systemd.unit:

"%%" | เครื่องหมายเปอร์เซ็นต์เดียว | ใช้ "%%" แทนที่ "%" เพื่อระบุเครื่องหมายเปอร์เซ็นต์เดียว

person Heinrich Hartmann    schedule 17.02.2019