0

我的服务器上有一个文件夹,它从另一台服务器上运行的 ftp 进程获取文件。

我需要的是,每当目录中出现新文件时,将这些文件交替移动到另外两个网络位置。(以负载平衡方式 - 第一个文件到位置 1,下一个文件到位置 2,同样在位置 1 下)

我使用 incrontab 运行 bash 脚本来执行此操作。

最合适的方法是什么?

这是我要做的方式。这是实现这一目标的最佳方法吗?

incrontab:

/myserver/monitored_folder IN_CREATE /root/scripts/move_files.sh $#

movefiles.sh bash 脚本(伪):

start
read var from file1
if var is odd
move $# to NetworkLocation1
else
move $# to NetworkLocation2
end if
increment var
write var to file1
end
4

2 回答 2

0

你有一个相当简单的方法,这似乎工作正常。我推荐的唯一其他方法是使用简单的切换(变量 0 / 1):

let toggle=0

if test "$toggle" -eq 0; then
    move to NetworkLocation1
    ((toggle+=1))
else
    move to NetworkLocation2
    ((toggle-=1))
fi

这只会确保基于每个文件的 NetworkLocation1 / NetworkLocation2 平衡,而不是文件中的奇数/偶数变量。考虑一下。

于 2014-07-04T10:09:36.470 回答
0

我已经实现了。它工作正常。

incrontab:

/data/source_folder/ IN_CREATE /path_to_script/file_delivery.sh $#

重击脚本:

#!/bin/bash
#log file location
logfile=/var/log/file_delivery.log
exec > $logfile 2>&1

read var < var.dat
rem=$(( $var % 2 ))

#action here
sleep 30
if [ $rem -eq 0 ]; then
  scp /data/source_folder/$1 root@SERVER1:/path_on_server1/dest_folder
  rm -f /data/source_folder/$1
  echo "$(date +"%y-%m-%d-%H:%M:%S") - file $1 has been moved to server1"
else
  scp /data/source_folder/$1 root@SERVER2:/path_on_server2/dest_folder
  rm -f /data/source_folder/$1
  echo "$(date +"%y-%m-%d-%H:%M:%S") - file $1 has been moved to server2"
fi

var=$((var+1))
echo $var > var.dat
于 2014-07-07T08:23:27.880 回答