|
|
|
@ -4,7 +4,7 @@ PROGRAM="osync" # Rsync based two way sync engine with fault tolerance
|
|
|
|
|
AUTHOR="(C) 2013-2016 by Orsiris de Jong"
|
|
|
|
|
CONTACT="http://www.netpower.fr/osync - ozy@netpower.fr"
|
|
|
|
|
PROGRAM_VERSION=1.1-RC1
|
|
|
|
|
PROGRAM_BUILD=2016040701
|
|
|
|
|
PROGRAM_BUILD=2016052601
|
|
|
|
|
IS_STABLE=yes
|
|
|
|
|
|
|
|
|
|
## FUNC_BUILD=2016052502
|
|
|
|
@ -92,6 +92,7 @@ function Dummy {
|
|
|
|
|
sleep .1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Sub function of Logger
|
|
|
|
|
function _Logger {
|
|
|
|
|
local svalue="${1}" # What to log to stdout
|
|
|
|
|
local lvalue="${2:-$svalue}" # What to log to logfile, defaults to screen value
|
|
|
|
@ -106,6 +107,7 @@ function _Logger {
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# General log function with log levels
|
|
|
|
|
function Logger {
|
|
|
|
|
local value="${1}" # Sentence to log (in double quotes)
|
|
|
|
|
local level="${2}" # Log level: PARANOIA_DEBUG, DEBUG, NOTICE, WARN, ERROR, CRITIAL
|
|
|
|
@ -149,6 +151,29 @@ function Logger {
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# QuickLogger subfunction, can be called directly
|
|
|
|
|
function _QuickLogger {
|
|
|
|
|
local value="${1}"
|
|
|
|
|
local destination="${2}" # Destination: stdout, log, both
|
|
|
|
|
|
|
|
|
|
if ([ "$destination" == "log" ] || [ "$destination" == "both" ]); then
|
|
|
|
|
echo -e "$(date) - $value" >> "$LOG_FILE"
|
|
|
|
|
elif ([ "$destination" == "stdout" ] || [ "$destination" == "both" ]); then
|
|
|
|
|
echo -e "$value"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Generic quick logging function
|
|
|
|
|
function QuickLogger {
|
|
|
|
|
local value="${1}"
|
|
|
|
|
|
|
|
|
|
if [ "$_SILENT" -eq 1 ]; then
|
|
|
|
|
_QuickLogger "$value" "log"
|
|
|
|
|
else
|
|
|
|
|
_QuickLogger "$value" "stdout"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Portable child (and grandchild) kill function tester under Linux, BSD and MacOS X
|
|
|
|
|
function KillChilds {
|
|
|
|
|
local pid="${1}"
|
|
|
|
@ -1324,7 +1349,7 @@ function _CreateStateDirsLocal {
|
|
|
|
|
__CheckArguments 1 $# ${FUNCNAME[0]} "$@" #__WITH_PARANOIA_DEBUG
|
|
|
|
|
|
|
|
|
|
if ! [ -d "$replica_state_dir" ]; then
|
|
|
|
|
$COMMAND_SUDO mkdir --parents "$replica_state_dir" > "$RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID" 2>&1
|
|
|
|
|
$COMMAND_SUDO mkdir -p "$replica_state_dir" > "$RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID" 2>&1
|
|
|
|
|
if [ $? != 0 ]; then
|
|
|
|
|
Logger "Cannot create state dir [$replica_state_dir]." "CRITICAL"
|
|
|
|
|
Logger "Command output:\n$(cat $RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID)" "ERROR"
|
|
|
|
@ -1342,7 +1367,7 @@ function _CreateStateDirsRemote {
|
|
|
|
|
CheckConnectivity3rdPartyHosts
|
|
|
|
|
CheckConnectivityRemoteHost
|
|
|
|
|
|
|
|
|
|
cmd=$SSH_CMD' "if ! [ -d \"'$replica_state_dir'\" ]; then '$COMMAND_SUDO' mkdir --parents \"'$replica_state_dir'\"; fi" > "'$RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID'" 2>&1'
|
|
|
|
|
cmd=$SSH_CMD' "if ! [ -d \"'$replica_state_dir'\" ]; then '$COMMAND_SUDO' mkdir -p \"'$replica_state_dir'\"; fi" > "'$RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID'" 2>&1'
|
|
|
|
|
Logger "cmd: $cmd" "DEBUG"
|
|
|
|
|
eval "$cmd" &
|
|
|
|
|
WaitForTaskCompletion $! 720 1800 ${FUNCNAME[0]}
|
|
|
|
@ -1371,7 +1396,7 @@ function _CheckReplicaPathsLocal {
|
|
|
|
|
|
|
|
|
|
if [ ! -d "$replica_path" ]; then
|
|
|
|
|
if [ "$CREATE_DIRS" == "yes" ]; then
|
|
|
|
|
$COMMAND_SUDO mkdir --parents "$replica_path" > "$RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID" 2>&1
|
|
|
|
|
$COMMAND_SUDO mkdir -p "$replica_path" > "$RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID" 2>&1
|
|
|
|
|
if [ $? != 0 ]; then
|
|
|
|
|
Logger "Cannot create local replica path [$replica_path]." "CRITICAL"
|
|
|
|
|
Logger "Command output:\n$(cat $RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID)"
|
|
|
|
@ -1399,7 +1424,7 @@ function _CheckReplicaPathsRemote {
|
|
|
|
|
|
|
|
|
|
CheckConnectivity3rdPartyHosts
|
|
|
|
|
CheckConnectivityRemoteHost
|
|
|
|
|
cmd=$SSH_CMD' "if ! [ -d \"'$replica_path'\" ]; then if [ \"'$CREATE_DIRS'\" == \"yes\" ]; then '$COMMAND_SUDO' mkdir --parents \"'$replica_path'\"; fi; fi" > "'$RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID'" 2>&1'
|
|
|
|
|
cmd=$SSH_CMD' "if ! [ -d \"'$replica_path'\" ]; then if [ \"'$CREATE_DIRS'\" == \"yes\" ]; then '$COMMAND_SUDO' mkdir -p \"'$replica_path'\"; fi; fi" > "'$RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID'" 2>&1'
|
|
|
|
|
Logger "cmd: $cmd" "DEBUG"
|
|
|
|
|
eval "$cmd" &
|
|
|
|
|
WaitForTaskCompletion $! 720 1800 ${FUNCNAME[0]}
|
|
|
|
@ -1987,7 +2012,7 @@ function _delete_local {
|
|
|
|
|
if [[ "$files" != "$previous_file/"* ]] && [ "$files" != "" ]; then
|
|
|
|
|
if [ "$SOFT_DELETE" != "no" ]; then
|
|
|
|
|
if [ ! -d "$replica_dir$deletion_dir" ]; then
|
|
|
|
|
mkdir --parents "$replica_dir$deletion_dir"
|
|
|
|
|
mkdir -p "$replica_dir$deletion_dir"
|
|
|
|
|
if [ $? != 0 ]; then
|
|
|
|
|
Logger "Cannot create replica deletion directory." "ERROR"
|
|
|
|
|
fi
|
|
|
|
@ -2006,7 +2031,7 @@ function _delete_local {
|
|
|
|
|
# In order to keep full path on soft deletion, create parent directories before move
|
|
|
|
|
parentdir="$(dirname "$files")"
|
|
|
|
|
if [ "$parentdir" != "." ]; then
|
|
|
|
|
mkdir --parents "$replica_dir$deletion_dir/$parentdir"
|
|
|
|
|
mkdir -p "$replica_dir$deletion_dir/$parentdir"
|
|
|
|
|
mv -f "$replica_dir$files" "$replica_dir$deletion_dir/$parentdir"
|
|
|
|
|
else
|
|
|
|
|
mv -f "$replica_dir$files" "$replica_dir$deletion_dir"
|
|
|
|
@ -2115,7 +2140,7 @@ $SSH_CMD ERROR_ALERT=0 sync_on_changes=$sync_on_changes _SILENT=$_SILENT _DEBUG=
|
|
|
|
|
do
|
|
|
|
|
if [[ "$files" != "$previous_file/"* ]] && [ "$files" != "" ]; then
|
|
|
|
|
if [ ! -d "$REPLICA_DIR$DELETE_DIR" ]; then
|
|
|
|
|
$COMMAND_SUDO mkdir --parents "$REPLICA_DIR$DELETE_DIR"
|
|
|
|
|
$COMMAND_SUDO mkdir -p "$REPLICA_DIR$DELETE_DIR"
|
|
|
|
|
if [ $? != 0 ]; then
|
|
|
|
|
Logger "Cannot create replica deletion directory." "ERROR"
|
|
|
|
|
fi
|
|
|
|
@ -2135,7 +2160,7 @@ $SSH_CMD ERROR_ALERT=0 sync_on_changes=$sync_on_changes _SILENT=$_SILENT _DEBUG=
|
|
|
|
|
# In order to keep full path on soft deletion, create parent directories before move
|
|
|
|
|
parentdir="$(dirname "$files")"
|
|
|
|
|
if [ "$parentdir" != "." ]; then
|
|
|
|
|
$COMMAND_SUDO mkdir --parents "$REPLICA_DIR$DELETE_DIR/$parentdir"
|
|
|
|
|
$COMMAND_SUDO mkdir -p "$REPLICA_DIR$DELETE_DIR/$parentdir"
|
|
|
|
|
$COMMAND_SUDO mv -f "$REPLICA_DIR$files" "$REPLICA_DIR$DELETE_DIR/$parentdir"
|
|
|
|
|
else
|
|
|
|
|
$COMMAND_SUDO mv -f "$REPLICA_DIR$files" "$REPLICA_DIR$DELETE_DIR"1
|
|
|
|
|