Script for checking if device is online, if not then do something












1















I'm building an IP Camera Server for rtsp ffmpeg capture and 24/7 purposes. Only thing that is missing is a script that checks connectivity of the camera and if it's not reachable there should be triggered another script which checks the cam for online status so that a new ffmpeg capture process can be started then.



I already spent plenty of time testing, but nothing will work right now.
So for the job I have three scripts. The 1st should check if the camera is still reachable and, if not, then go to the 2nd:



#!/bin/sh
# record-ping_cam1.sh
# Check 24h if cam is alive, in case of error code 1 (offline) start record-waitfor_xxx.sh
#
IPCAM=192.168.xxx.xxx
ping -w 86400 -i2 $IPCAM 0>/dev/null
OFFLINE=$?
if [ $OFFLINE -eq 1 ]
then
source /home/xxx/record-ping-waitfor_cam1.sh
fi


The 2nd should check if it reachable again and, if it is, then go to the 3rd:



#!/bin/sh
# record-ping-waitfor_cam1.sh
# Check if Cam is alive, if yes (exit code 0) then execute record-ping-reconnect_xxx.sh
#
# Ping with infinitive loop - as soon as reachable (exit code 0) then go on with record script
IPCAM=192.168.xxx.xxx
while true; do ping -c1 $IPCAM > /dev/null && break; done
ONLINE=$?
if [ $ONLINE -eq 0 ]
then
source /home/xxx/record-ping-reconnect_cam1.sh
fi


The 3rd starts the new ffmpeg process and writes ffmpeg and ping PIDs to file (needed later):



#!/bin/sh
# record-ping-reconnect_cam1.sh
# Record IPcam after any case of signal lost
#
# This will print the current date and time in a format appropriate for storage
STARTTIME=$(/bin/date +"%d.%m.%Y")-"("$(/bin/date +"%H").$(/bin/date +"%M")Uhr")"
#
## IP Camera Names ##
# Creating date stamps for each of the Cameras
CAM=Cam1_$STARTTIME
#
## Network and Local Storage Locations ## #Trailing '/' is necessary here
RCDIR="/home/xxx/Reconnect/"
#
## Record Time per File sec ##
LENGTH="86400" # (24h)
#
## Record Settings ##
#
# wait until cam is ready to capture again
sleep 40s
# start capture this camsource
ffmpeg -v 0 -rtsp_transport tcp -i "rtsp://device:port/11" -vcodec copy -an -t $LENGTH $RCDIR$CAM1.mkv & echo $! > /home/xxx/Reconnect/PIDs/ffmpeg_cam1.pid
# start the ping routine, check the cam for connectivity
source /home/xxx/record-ping_cam1.sh & echo $! > /home/xxx/Reconnect/PIDs/ping_cam1.pid
exit


The thing is... the 1st script worked fine but I had trouble with the 2nd. I tried then different things with fping but without luck. Now with ping in the while loop it's working flawlessly. But then the 1st script stopped working... that seems weird to me.



Server is a RPI 3b+ with Raspbian Stretch










share|improve this question















migrated from askubuntu.com Dec 13 '18 at 23:20


This question came from our site for Ubuntu users and developers.











  • 3





    What exactly does "stopped working" mean?

    – Jaleks
    Dec 13 '18 at 23:30






  • 1





    What's the purpose of the 0 in 0>/dev/null in the first script? Btw, you don't need to anonymise non routable addresses ;)

    – tink
    Dec 14 '18 at 0:19


















1















I'm building an IP Camera Server for rtsp ffmpeg capture and 24/7 purposes. Only thing that is missing is a script that checks connectivity of the camera and if it's not reachable there should be triggered another script which checks the cam for online status so that a new ffmpeg capture process can be started then.



I already spent plenty of time testing, but nothing will work right now.
So for the job I have three scripts. The 1st should check if the camera is still reachable and, if not, then go to the 2nd:



#!/bin/sh
# record-ping_cam1.sh
# Check 24h if cam is alive, in case of error code 1 (offline) start record-waitfor_xxx.sh
#
IPCAM=192.168.xxx.xxx
ping -w 86400 -i2 $IPCAM 0>/dev/null
OFFLINE=$?
if [ $OFFLINE -eq 1 ]
then
source /home/xxx/record-ping-waitfor_cam1.sh
fi


The 2nd should check if it reachable again and, if it is, then go to the 3rd:



#!/bin/sh
# record-ping-waitfor_cam1.sh
# Check if Cam is alive, if yes (exit code 0) then execute record-ping-reconnect_xxx.sh
#
# Ping with infinitive loop - as soon as reachable (exit code 0) then go on with record script
IPCAM=192.168.xxx.xxx
while true; do ping -c1 $IPCAM > /dev/null && break; done
ONLINE=$?
if [ $ONLINE -eq 0 ]
then
source /home/xxx/record-ping-reconnect_cam1.sh
fi


The 3rd starts the new ffmpeg process and writes ffmpeg and ping PIDs to file (needed later):



#!/bin/sh
# record-ping-reconnect_cam1.sh
# Record IPcam after any case of signal lost
#
# This will print the current date and time in a format appropriate for storage
STARTTIME=$(/bin/date +"%d.%m.%Y")-"("$(/bin/date +"%H").$(/bin/date +"%M")Uhr")"
#
## IP Camera Names ##
# Creating date stamps for each of the Cameras
CAM=Cam1_$STARTTIME
#
## Network and Local Storage Locations ## #Trailing '/' is necessary here
RCDIR="/home/xxx/Reconnect/"
#
## Record Time per File sec ##
LENGTH="86400" # (24h)
#
## Record Settings ##
#
# wait until cam is ready to capture again
sleep 40s
# start capture this camsource
ffmpeg -v 0 -rtsp_transport tcp -i "rtsp://device:port/11" -vcodec copy -an -t $LENGTH $RCDIR$CAM1.mkv & echo $! > /home/xxx/Reconnect/PIDs/ffmpeg_cam1.pid
# start the ping routine, check the cam for connectivity
source /home/xxx/record-ping_cam1.sh & echo $! > /home/xxx/Reconnect/PIDs/ping_cam1.pid
exit


The thing is... the 1st script worked fine but I had trouble with the 2nd. I tried then different things with fping but without luck. Now with ping in the while loop it's working flawlessly. But then the 1st script stopped working... that seems weird to me.



Server is a RPI 3b+ with Raspbian Stretch










share|improve this question















migrated from askubuntu.com Dec 13 '18 at 23:20


This question came from our site for Ubuntu users and developers.











  • 3





    What exactly does "stopped working" mean?

    – Jaleks
    Dec 13 '18 at 23:30






  • 1





    What's the purpose of the 0 in 0>/dev/null in the first script? Btw, you don't need to anonymise non routable addresses ;)

    – tink
    Dec 14 '18 at 0:19
















1












1








1








I'm building an IP Camera Server for rtsp ffmpeg capture and 24/7 purposes. Only thing that is missing is a script that checks connectivity of the camera and if it's not reachable there should be triggered another script which checks the cam for online status so that a new ffmpeg capture process can be started then.



I already spent plenty of time testing, but nothing will work right now.
So for the job I have three scripts. The 1st should check if the camera is still reachable and, if not, then go to the 2nd:



#!/bin/sh
# record-ping_cam1.sh
# Check 24h if cam is alive, in case of error code 1 (offline) start record-waitfor_xxx.sh
#
IPCAM=192.168.xxx.xxx
ping -w 86400 -i2 $IPCAM 0>/dev/null
OFFLINE=$?
if [ $OFFLINE -eq 1 ]
then
source /home/xxx/record-ping-waitfor_cam1.sh
fi


The 2nd should check if it reachable again and, if it is, then go to the 3rd:



#!/bin/sh
# record-ping-waitfor_cam1.sh
# Check if Cam is alive, if yes (exit code 0) then execute record-ping-reconnect_xxx.sh
#
# Ping with infinitive loop - as soon as reachable (exit code 0) then go on with record script
IPCAM=192.168.xxx.xxx
while true; do ping -c1 $IPCAM > /dev/null && break; done
ONLINE=$?
if [ $ONLINE -eq 0 ]
then
source /home/xxx/record-ping-reconnect_cam1.sh
fi


The 3rd starts the new ffmpeg process and writes ffmpeg and ping PIDs to file (needed later):



#!/bin/sh
# record-ping-reconnect_cam1.sh
# Record IPcam after any case of signal lost
#
# This will print the current date and time in a format appropriate for storage
STARTTIME=$(/bin/date +"%d.%m.%Y")-"("$(/bin/date +"%H").$(/bin/date +"%M")Uhr")"
#
## IP Camera Names ##
# Creating date stamps for each of the Cameras
CAM=Cam1_$STARTTIME
#
## Network and Local Storage Locations ## #Trailing '/' is necessary here
RCDIR="/home/xxx/Reconnect/"
#
## Record Time per File sec ##
LENGTH="86400" # (24h)
#
## Record Settings ##
#
# wait until cam is ready to capture again
sleep 40s
# start capture this camsource
ffmpeg -v 0 -rtsp_transport tcp -i "rtsp://device:port/11" -vcodec copy -an -t $LENGTH $RCDIR$CAM1.mkv & echo $! > /home/xxx/Reconnect/PIDs/ffmpeg_cam1.pid
# start the ping routine, check the cam for connectivity
source /home/xxx/record-ping_cam1.sh & echo $! > /home/xxx/Reconnect/PIDs/ping_cam1.pid
exit


The thing is... the 1st script worked fine but I had trouble with the 2nd. I tried then different things with fping but without luck. Now with ping in the while loop it's working flawlessly. But then the 1st script stopped working... that seems weird to me.



Server is a RPI 3b+ with Raspbian Stretch










share|improve this question
















I'm building an IP Camera Server for rtsp ffmpeg capture and 24/7 purposes. Only thing that is missing is a script that checks connectivity of the camera and if it's not reachable there should be triggered another script which checks the cam for online status so that a new ffmpeg capture process can be started then.



I already spent plenty of time testing, but nothing will work right now.
So for the job I have three scripts. The 1st should check if the camera is still reachable and, if not, then go to the 2nd:



#!/bin/sh
# record-ping_cam1.sh
# Check 24h if cam is alive, in case of error code 1 (offline) start record-waitfor_xxx.sh
#
IPCAM=192.168.xxx.xxx
ping -w 86400 -i2 $IPCAM 0>/dev/null
OFFLINE=$?
if [ $OFFLINE -eq 1 ]
then
source /home/xxx/record-ping-waitfor_cam1.sh
fi


The 2nd should check if it reachable again and, if it is, then go to the 3rd:



#!/bin/sh
# record-ping-waitfor_cam1.sh
# Check if Cam is alive, if yes (exit code 0) then execute record-ping-reconnect_xxx.sh
#
# Ping with infinitive loop - as soon as reachable (exit code 0) then go on with record script
IPCAM=192.168.xxx.xxx
while true; do ping -c1 $IPCAM > /dev/null && break; done
ONLINE=$?
if [ $ONLINE -eq 0 ]
then
source /home/xxx/record-ping-reconnect_cam1.sh
fi


The 3rd starts the new ffmpeg process and writes ffmpeg and ping PIDs to file (needed later):



#!/bin/sh
# record-ping-reconnect_cam1.sh
# Record IPcam after any case of signal lost
#
# This will print the current date and time in a format appropriate for storage
STARTTIME=$(/bin/date +"%d.%m.%Y")-"("$(/bin/date +"%H").$(/bin/date +"%M")Uhr")"
#
## IP Camera Names ##
# Creating date stamps for each of the Cameras
CAM=Cam1_$STARTTIME
#
## Network and Local Storage Locations ## #Trailing '/' is necessary here
RCDIR="/home/xxx/Reconnect/"
#
## Record Time per File sec ##
LENGTH="86400" # (24h)
#
## Record Settings ##
#
# wait until cam is ready to capture again
sleep 40s
# start capture this camsource
ffmpeg -v 0 -rtsp_transport tcp -i "rtsp://device:port/11" -vcodec copy -an -t $LENGTH $RCDIR$CAM1.mkv & echo $! > /home/xxx/Reconnect/PIDs/ffmpeg_cam1.pid
# start the ping routine, check the cam for connectivity
source /home/xxx/record-ping_cam1.sh & echo $! > /home/xxx/Reconnect/PIDs/ping_cam1.pid
exit


The thing is... the 1st script worked fine but I had trouble with the 2nd. I tried then different things with fping but without luck. Now with ping in the while loop it's working flawlessly. But then the 1st script stopped working... that seems weird to me.



Server is a RPI 3b+ with Raspbian Stretch







bash ip ping






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 13 '18 at 23:33









Rui F Ribeiro

39.6k1479132




39.6k1479132










asked Dec 13 '18 at 23:02









diggidrediggidre

163




163




migrated from askubuntu.com Dec 13 '18 at 23:20


This question came from our site for Ubuntu users and developers.






migrated from askubuntu.com Dec 13 '18 at 23:20


This question came from our site for Ubuntu users and developers.










  • 3





    What exactly does "stopped working" mean?

    – Jaleks
    Dec 13 '18 at 23:30






  • 1





    What's the purpose of the 0 in 0>/dev/null in the first script? Btw, you don't need to anonymise non routable addresses ;)

    – tink
    Dec 14 '18 at 0:19
















  • 3





    What exactly does "stopped working" mean?

    – Jaleks
    Dec 13 '18 at 23:30






  • 1





    What's the purpose of the 0 in 0>/dev/null in the first script? Btw, you don't need to anonymise non routable addresses ;)

    – tink
    Dec 14 '18 at 0:19










3




3





What exactly does "stopped working" mean?

– Jaleks
Dec 13 '18 at 23:30





What exactly does "stopped working" mean?

– Jaleks
Dec 13 '18 at 23:30




1




1





What's the purpose of the 0 in 0>/dev/null in the first script? Btw, you don't need to anonymise non routable addresses ;)

– tink
Dec 14 '18 at 0:19







What's the purpose of the 0 in 0>/dev/null in the first script? Btw, you don't need to anonymise non routable addresses ;)

– tink
Dec 14 '18 at 0:19












2 Answers
2






active

oldest

votes


















1














Ok figured out! Seems then without else is the failure in this case. Now it's working.



# Ping in an infintive loop - as soon as reachable (exit code 0) then go on with record script
HOST=adress
ping -w 86400 -i2 $HOST 0>/dev/null
OFFLINE=$?
if [ $OFFLINE -eq 1 ]
then
echo " "
else
bash /home/xxx/record-ping-waitfor_g-cam1.sh
fi





share|improve this answer

































    0














    Just a comment to emphasize that you can use the return code directly in "if"



    if ping -w 10 -c2 adress &> /dev/null
    then echo "Ok"
    else echo "Call the sys admin"
    fi


    See also the options of ping and redirection.






    share|improve this answer

























      Your Answer








      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "106"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: false,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f487885%2fscript-for-checking-if-device-is-online-if-not-then-do-something%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      1














      Ok figured out! Seems then without else is the failure in this case. Now it's working.



      # Ping in an infintive loop - as soon as reachable (exit code 0) then go on with record script
      HOST=adress
      ping -w 86400 -i2 $HOST 0>/dev/null
      OFFLINE=$?
      if [ $OFFLINE -eq 1 ]
      then
      echo " "
      else
      bash /home/xxx/record-ping-waitfor_g-cam1.sh
      fi





      share|improve this answer






























        1














        Ok figured out! Seems then without else is the failure in this case. Now it's working.



        # Ping in an infintive loop - as soon as reachable (exit code 0) then go on with record script
        HOST=adress
        ping -w 86400 -i2 $HOST 0>/dev/null
        OFFLINE=$?
        if [ $OFFLINE -eq 1 ]
        then
        echo " "
        else
        bash /home/xxx/record-ping-waitfor_g-cam1.sh
        fi





        share|improve this answer




























          1












          1








          1







          Ok figured out! Seems then without else is the failure in this case. Now it's working.



          # Ping in an infintive loop - as soon as reachable (exit code 0) then go on with record script
          HOST=adress
          ping -w 86400 -i2 $HOST 0>/dev/null
          OFFLINE=$?
          if [ $OFFLINE -eq 1 ]
          then
          echo " "
          else
          bash /home/xxx/record-ping-waitfor_g-cam1.sh
          fi





          share|improve this answer















          Ok figured out! Seems then without else is the failure in this case. Now it's working.



          # Ping in an infintive loop - as soon as reachable (exit code 0) then go on with record script
          HOST=adress
          ping -w 86400 -i2 $HOST 0>/dev/null
          OFFLINE=$?
          if [ $OFFLINE -eq 1 ]
          then
          echo " "
          else
          bash /home/xxx/record-ping-waitfor_g-cam1.sh
          fi






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Dec 16 '18 at 13:36









          Jeff Schaller

          39.7k1054126




          39.7k1054126










          answered Dec 14 '18 at 17:45









          diggidrediggidre

          163




          163

























              0














              Just a comment to emphasize that you can use the return code directly in "if"



              if ping -w 10 -c2 adress &> /dev/null
              then echo "Ok"
              else echo "Call the sys admin"
              fi


              See also the options of ping and redirection.






              share|improve this answer






























                0














                Just a comment to emphasize that you can use the return code directly in "if"



                if ping -w 10 -c2 adress &> /dev/null
                then echo "Ok"
                else echo "Call the sys admin"
                fi


                See also the options of ping and redirection.






                share|improve this answer




























                  0












                  0








                  0







                  Just a comment to emphasize that you can use the return code directly in "if"



                  if ping -w 10 -c2 adress &> /dev/null
                  then echo "Ok"
                  else echo "Call the sys admin"
                  fi


                  See also the options of ping and redirection.






                  share|improve this answer















                  Just a comment to emphasize that you can use the return code directly in "if"



                  if ping -w 10 -c2 adress &> /dev/null
                  then echo "Ok"
                  else echo "Call the sys admin"
                  fi


                  See also the options of ping and redirection.







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Dec 18 '18 at 16:04

























                  answered Dec 18 '18 at 13:53









                  JJoaoJJoao

                  7,1691928




                  7,1691928






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Unix & Linux Stack Exchange!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f487885%2fscript-for-checking-if-device-is-online-if-not-then-do-something%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

                      ComboBox Display Member on multiple fields

                      Is it possible to collect Nectar points via Trainline?