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:
JavaScript
x
#!/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:
JavaScript
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?
Advertisement
Answer
The “stop” check needs to come before you overwrite the pid file, and certainly doesn’t need to be inside the loop.
JavaScript
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