2014-07-04 38 views
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 

回答

0

我已經實現了它。它工作正常。

incrontab:

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

bash腳本:

#!/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 [email protected]:/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 [email protected]:/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 
0

你必須做的相當簡單的方式,這似乎是工作的罰款。我建議唯一的其他方法將是使用一個簡單的切換(變量是0/1):

let toggle=0 

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

這將只是保證基於內的每個文件,而不是一個奇/偶VAR一個NetworkLocation1/NetworkLocation2平衡一份文件。給它一些想法。

+0

但作爲incorntab每次看到一個新的文件時,調用新腳本,該腳本總是撥動= 0運行,並移動到文件僅NetworkLocation1。不是嗎? –

相關問題