diff --git a/scripts/restart_services.sh b/scripts/restart_services.sh index ad4e9f3..0516c70 100755 --- a/scripts/restart_services.sh +++ b/scripts/restart_services.sh @@ -4,23 +4,48 @@ source /etc/birdnet/birdnet.conf set -x my_dir=$HOME/BirdNET-Pi/scripts + sudo systemctl stop birdnet_server.service -sudo pkill server.py sudo systemctl stop birdnet_recording.service + services=(web_terminal.service -spectrogram_viewer.service -livestream.service -icecast2.service -extraction.service -chart_viewer.service -birdnet_recording.service -birdnet_log.service) + spectrogram_viewer.service + livestream.service + icecast2.service + extraction.service + chart_viewer.service + birdnet_recording.service + birdnet_log.service) for i in "${services[@]}";do -sudo systemctl restart "${i}" + sudo systemctl restart "${i}" done -until grep 5050 <(netstat -tulpn 2>&1);do -sudo systemctl restart birdnet_server.service -sleep 45 + +sudo systemctl start birdnet_server.service +sleep 5 + +for i in {1..5}; do + # We want to loop here (5*5seconds) until the server is running and listening on its port + systemctl is-active --quiet birdnet_server.service \ + && grep 5050 <(netstat -tulpn 2>&1) \ + && logger "[$0] birdnet_server.service is running" \ + && break + + sleep 5 done + +# Let's check a final time to ensure the server is running +systemctl is-active --quiet birdnet_server.service && grep 5050 <(netstat -tulpn 2>&1) +status=$? + +if (( status != 0 )); then + logger "[$0] Unable to start birdnet_server.service... Looping until it start properly" + + until grep 5050 <(netstat -tulpn 2>&1);do + sudo systemctl restart birdnet_server.service + sleep 45 + done +fi + +# Finally start the birdnet_analysis.service sudo systemctl restart birdnet_analysis.service diff --git a/scripts/server.py b/scripts/server.py index 8c681b5..c73b0fa 100755 --- a/scripts/server.py +++ b/scripts/server.py @@ -30,6 +30,8 @@ FORMAT = 'utf-8' DISCONNECT_MESSAGE = "!DISCONNECT" server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + try: server.bind(ADDR) except BaseException: diff --git a/scripts/update_birdnet_snippets.sh b/scripts/update_birdnet_snippets.sh index 612ee4d..7c13581 100755 --- a/scripts/update_birdnet_snippets.sh +++ b/scripts/update_birdnet_snippets.sh @@ -71,4 +71,6 @@ then unzip $HOME/BirdNET-Pi/model/labels_l18n.zip labels_en.txt \ -d $HOME/BirdNET-Pi/model mv $HOME/BirdNET-Pi/model/labels_en.txt $HOME/BirdNET-Pi/model/labels.txt -fi \ No newline at end of file +fi + +sudo systemctl daemon-reload