Home > Net >  Monitor strace in a loop, restart process when error string is matched
Monitor strace in a loop, restart process when error string is matched

Time:11-13

I'm using a proprietary app on my Raspberry Pi 4.

The app has a bug where after a certain amount of time it slows to a crawl. It doesn't fully crash, it just starts performing sub-optimally. The fix is to kill the process and reopen it.

There is a flag in the apps console output I could use to determine that the problem has occurred: "Time taken to process image --249" (249 being the maximum it reports).

Is it possible to set up a .sh file to monitor strace for this process and then kill the process and re-open it? I've done plenty of Googling but I am out of my depth.

I would prefer not to write the strace to a text file and then read from that file. The console output from the application updates 60~ times per second and this would quickly ruin the SD card.

My instinct is to loop through the 10 most recent entries in the strace and look for a string match, but I can't figure our the syntax for that nor if it's even possible.

CodePudding user response:

How about a fairly naive bash wrapper? Since you're using strace and we know it's well behaved when writing to a pipe (it will exit when the pipe stops reading) you should be able to just do something like this:

#!/bin/bash
while strace -vF app 2>&1 | grep -q -m1 -- '--249'
do 
  echo restart 
  sleep X
done

Adjust the X in the sleep to a suitable value.

Personally I'd ask the maker of the proprietary app to sort their shit out ;)

  • Related