Advertisement
Guest User

rsync-motdet-now.sh / ComEye

a guest
Dec 29th, 2012
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.65 KB | None | 0 0
  1. #!/bin/bash
  2. # rsync-motdet-now.sh
  3.  
  4. # Configuration
  5. METHOD=
  6. ARGS="--progress --chmod=g+w,o-rwx"
  7. SRC=/home/motion/detections/
  8. DEST=usul::motdet
  9. OUTPUT_MAIL=0
  10.  
  11. # Constants
  12. SCRIPTNAME=$(basename "$0")
  13. CWDIR=$(dirname "$0")
  14. LOG=$SCRIPTNAME.log
  15. LOCK=$SCRIPTNAME.lock
  16. PID_FILE=$SCRIPTNAME.tmp
  17. RSYNC_CMD="rsync -av $ARGS $SRC $DEST"
  18.  
  19. ## Process start ##
  20. cd $CWDIR
  21. echo "($$) Process started | CWD: $PWD | UID: $UID | ARGS: $@" >> $LOG
  22.  
  23. pid=$$
  24.  
  25. # Check lock
  26. if ! mkdir $LOCK; then
  27.     echo "($$) Lock already exists, updating PID & exiting" >> $LOG
  28.     echo $pid > $PID_FILE
  29.     exit 1
  30. fi;
  31.  
  32. echo "($$) Lock does not exist, creating" >> $LOG
  33. echo $pid > $PID_FILE
  34. echo "($$) Lock PID: `cat $PID_FILE`" >> $LOG
  35.  
  36. # Loop / Wait for no more concurrent processes
  37. runCmd=0
  38. while [ $runCmd == 0 ]; do
  39.     echo "($$) Waiting 2s more..." >> $LOG
  40.     sleep 1
  41.     lastPid=`cat $PID_FILE`
  42.     echo "($$) $lastPid // $pid" >> $LOG
  43.     if [ "$lastPid" == "$pid" ]; then
  44.         runCmd=1
  45.     else
  46.         pid=$lastPid
  47.     fi
  48. done
  49.  
  50. echo "($$) Lock PID unchanged, executing commands" >> $LOG
  51.  
  52. # Loop until command is out of job
  53. out="`date` Starting sync...\n"
  54. while [ $runCmd == 1 ]; do
  55.     out="$out`$RSYNC_CMD 2>&1` \n"
  56.    
  57.     lastPid=`cat $PID_FILE`
  58.     echo "($$) $lastPid // $pid" >> $LOG
  59.     if [ "$lastPid" == "$pid" ]; then
  60.         runCmd=0
  61.         rmdir $LOCK
  62.         rm $PID_FILE
  63.     else
  64.         pid=$lastPid
  65.     fi
  66. done
  67. out="$out`date` Done.\n"
  68.  
  69. echo "($$) Finished, flushing output:" >> $LOG
  70. echo -e "$out" >> $LOG
  71.  
  72. # Output
  73. if [ $OUTPUT_MAIL != 0 ]; then
  74.     echo -e "$out" | mail -s "$SCRIPTNAME" $OUTPUT_MAIL
  75. else
  76.     echo -e "$out"
  77. fi;
  78.  
  79. echo "($$) Process finished | CWD: $PWD | UID: $UID | ARGS: $@" >> $LOG
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement