The second definition of nudge, according to Webster, is to “prod lightly: urge into action.”
We use that concept in our data environments for various long running processes; for things that we want to happen frequently, but with an unknown runtime.
There are many ways to modify/customize this concept for specific uses. This basic concept is here:
#!/bin/bash
## Nudge.sh -- for forever running, self re-entrant script.
SLEEPTIME=2m
# You may have configuration variables you want to include. Just create a file with the script name plus .env and this will source that file.
# . ${0}.env
# Optional, but you might want to make sure you keep running by default
if [ -e ${0}.stop ]; then rm -f ${0}.stop; fi
# do something useful
python useful.py >> log.$0 2>&1
# Just so we know things are running, even w/o log entries.
touch log.file
## and now we sleep then relaunch or exit as needed.
sleep $SLEEPTIME
# To stop the forever loop, just touch a file. (touch ${0}.stop)
if [ -e ${0}.stop ]; then echo "Stopping"; exit; fi
# Call myself again as a background child.
$0 &
# Remove myself as a parent to the just launched process. ($! is the PID for that child)
disown $!
Run a command, take a nap, repeat.
~~ GM