diff --git a/pping/scripts/rotate-pping-output.sh b/pping/scripts/rotate-pping-output.sh index 346ce90..a9bbba9 100755 --- a/pping/scripts/rotate-pping-output.sh +++ b/pping/scripts/rotate-pping-output.sh @@ -2,6 +2,7 @@ MAX_WAIT_ITER=10 pping_path=${1:-"/var/log/pping/pping.out.json"} +instance=$2 # pping service instance to reload pping_folder=$(dirname "$pping_path") pping_file=$(basename "$pping_path") @@ -21,11 +22,12 @@ if ! mv "$pping_path" "$newplace"; then exit 1 fi -# Tell ePPing to reopen file -if systemctl is-active --quiet pping.service; then - systemctl reload pping.service + +if [[ -n "$instance" ]] && systemctl is-active --quiet "pping@$instance.service"; then + systemctl reload "pping@$instance.service" fi +# Compress the old file (once ePPing has stopped writing to it) if [[ -f "$newplace" ]]; then for (( i = 0; i < MAX_WAIT_ITER; i++)); do if fuser -s "$newplace"; then diff --git a/pping/systemd-files/pping.service b/pping/systemd-files/pping@.service similarity index 70% rename from pping/systemd-files/pping.service rename to pping/systemd-files/pping@.service index 28639af..3b5a023 100644 --- a/pping/systemd-files/pping.service +++ b/pping/systemd-files/pping@.service @@ -1,32 +1,31 @@ -[Unit] -Description=ePPing - Passive monitoring of network RTTs -After=network.service -Wants=rotate-pping.timer - -# Uncomment below if running with LibreQoS -# After=lqosd.service - -[Service] -# Ensure folder for saving output to exists -ExecStartPre=/usr/bin/mkdir -p /var/log/pping - -# Rotate any old output first to ensure ePPing can start writing to its intended file -ExecStartPre=/opt/bpf-examples/pping/scripts/rotate-pping-output.sh /var/log/pping/pping.out.json - -WorkingDirectory=/opt/bpf-examples/pping -ExecStart=/opt/bpf-examples/pping/pping -i -l -r 10 -a 10 -F json -w /var/log/pping/pping.out.json - -# On systemctl reload, send a SIGHUP to ePPing which causes it to reopen its output file -ExecReload=kill -HUP $MAINPID - -Restart=on-failure -RestartSec=60 - -# Set to whatever maximum memory footprint you can tolerate -# Note, hard-kills the ePPing process without allowing it to clean up. Consider -# running /scripts/cleanup-tc-progs after. -MemoryMax=4G - -[Install] -WantedBy=default.target - +[Unit] +Description=ePPing - Passive monitoring of network RTTs on %i +After=network.service +Wants=rotate-pping@%i.timer + +# Uncomment below if running with LibreQoS +# After=lqosd.service + +[Service] +# Ensure folder for saving output to exists +ExecStartPre=/usr/bin/mkdir -p /var/log/pping/%i + +# Rotate any old output first to ensure ePPing can start writing to its intended file +ExecStartPre=/opt/bpf-examples/pping/scripts/rotate-pping-output.sh /var/log/pping/%i/pping.%i.json + +WorkingDirectory=/opt/bpf-examples/pping +ExecStart=/opt/bpf-examples/pping/pping -i %i -l -r 10 -a 10 -F json -w /var/log/pping/%i/pping.%i.json + +# On systemctl reload, send a SIGHUP to ePPing which causes it to reopen its output file +ExecReload=kill -HUP $MAINPID + +Restart=on-failure +RestartSec=60 + +# Set to whatever maximum memory footprint you can tolerate +# Note, hard-kills the ePPing process without allowing it to clean up. Consider +# running /scripts/cleanup-tc-progs after. +MemoryMax=4G + +[Install] +WantedBy=default.target diff --git a/pping/systemd-files/rotate-pping.service b/pping/systemd-files/rotate-pping.service deleted file mode 100644 index 0827059..0000000 --- a/pping/systemd-files/rotate-pping.service +++ /dev/null @@ -1,6 +0,0 @@ -[Unit] -Description=Rotates the output file from ePPing (pping.service) - -[Service] -Type=oneshot -ExecStart=/opt/bpf-examples/pping/scripts/rotate-pping-output.sh /var/log/pping/pping.out.json diff --git a/pping/systemd-files/rotate-pping.timer b/pping/systemd-files/rotate-pping.timer deleted file mode 100644 index 664e07d..0000000 --- a/pping/systemd-files/rotate-pping.timer +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Rotate ePPing output periodically -PartOf=pping.service - -[Timer] -Unit=rotate-pping.service - -# Rotate ePPing output every X seconds -OnActiveSec=60 -OnUnitActiveSec=60 -AccuracySec=1us diff --git a/pping/systemd-files/rotate-pping@.service b/pping/systemd-files/rotate-pping@.service new file mode 100644 index 0000000..726e292 --- /dev/null +++ b/pping/systemd-files/rotate-pping@.service @@ -0,0 +1,6 @@ +[Unit] +Description=Rotates the output file from ePPing on %i (pping@%i.service) + +[Service] +Type=oneshot +ExecStart=/opt/bpf-examples/pping/scripts/rotate-pping-output.sh /var/log/pping/%i/pping.%i.json %i diff --git a/pping/systemd-files/rotate-pping@.timer b/pping/systemd-files/rotate-pping@.timer new file mode 100644 index 0000000..37d4f7f --- /dev/null +++ b/pping/systemd-files/rotate-pping@.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Rotate ePPing output for %i periodically +PartOf=pping@%i.service + +[Timer] +Unit=rotate-pping@%i.service + +# Rotate ePPing output every X seconds +OnActiveSec=60 +OnUnitActiveSec=60 +AccuracySec=1us