How to stop a shell script correctly?
15,777
The "stop" check needs to come before you overwrite the pid file, and certainly doesn't need to be inside the loop.
if [ "$1" = stop ]; then
echo "Stopping ..."
sudo pkill -F /var/run/start_gps-read.pid
exit
fi
echo "$$" > /var/run/start_gps-read.pid
while true; do
sudo /home/dh/gps_read.exe ...
sleep 3
done
Author by
Michael Gierer
Updated on June 12, 2022Comments
-
Michael Gierer almost 2 years
I've written a small bash script to start a program every 3 seconds. This script is executed on startup and it saves its PID into a pidfile:
#!/bin/bash echo $$ > /var/run/start_gps-read.pid while [ true ] ; do if [ "$1" == "stop" ] ; then echo "Stopping GPS read script ..." sudo pkill -F /var/run/start_gps-read.pid exit fi sudo /home/dh/gps_read.exe /dev/ttyACM0 /home/dh/gps_files/gpsMaus_1.xml sleep 3 done
The problem is, I can't terminate the shell script by calling
start_gps-read.sh stop
. There it should read the pidfile and stop the inital process (from startup).But when I call
stop
, the script still runs:dh@Raspi_DataHarvest:~$ sudo /etc/init.d/start_gps-read.sh stop Stopping GPS read script ... dh@Raspi_DataHarvest:~$ ps aux | grep start root 488 0.0 0.3 5080 2892 ? Ss 13:30 0:00 /bin/bash /etc/init.d/start_gps-read.sh start dh 1125 0.0 0.2 4296 2016 pts/0 S+ 13:34 0:00 grep start
Note: The script is always executed as
sudo
.Does anyone know how to stop my shell script?