Bagaimana cara keluar dari Specifier systemd untuk diteruskan ke perintah di ExecStart

Saya telah menulis layanan systemd berikut tcpdumpd.service untuk memulai rekaman tcpdump yang persisten.

[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 memungkinkan strftime-placeholder seperti %H untuk jam, %M untuk menit, dan seterusnya untuk memungkinkan Anda membuat file yang diberi stempel waktu.

Namun, systemd memiliki penentu khusus yang dapat digunakan di dalamnya, seperti (%n, %N, %p, %i, %U, %u, %m, %H, %b, %v) Jadi penentu mana pun yang tumpang tindih, seperti %m dan %H meneruskan informasi dari systemd dan tidak mengizinkan placeholder diteruskan ke tcpdump untuk membuat stempel waktu.

Adakah yang tahu jika ada cara untuk keluar dari penentu di systemd sehingga saya bisa meneruskan %m dan %H ke tcpdump?


person Ben Sooter    schedule 10.11.2016    source sumber


Jawaban (2)


Saya telah mencoba keluar dari penentu khusus seperti %%m, \%m tanpa hasil.

Namun, jika Anda perlu menyelesaikan pekerjaan tersebut, berikut solusinya:

Buat file tcpdumpd.environment yang berisi definisi variabel TCPDUMP_FORMAT.

TCPDUMP_FORMAT=%Y-%m-%d_%H:%M:%S

Ubah tcpdumpd.service: tambahkan opsi EnvironmentFile= ke dalamnya dan ganti string format dengan ${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
Ini adalah solusinya. Ditemukan jawaban ini yang membawa saya ke solusi tepat Anda. Terima kasih! - person Ben Sooter; 10.11.2016
comment
Dengan systemd versi 215 Anda dapat menggunakan Environment="TCPDUMP_FORMAT=%%Y-%%m-%%d_%%H:%%M:%%S" alih-alih EnvironmentFile. - person Iskren; 22.06.2017

Adakah yang tahu jika ada cara untuk keluar dari penentu di systemd sehingga saya bisa meneruskan %m dan %H ke tcpdump?

Ya: %%m dan %%H.

Lihat man systemd.unit:

"%%" | Tanda persen tunggal | Gunakan "%%" sebagai pengganti "%" untuk menentukan satu tanda persen.

person Heinrich Hartmann    schedule 17.02.2019