私は毎分XX時に実行するスクリプトを持っています。スクリプトは、指定されたディレクトリ内のすべてのサブフォルダをループし、内部のファイルに対して操作を実行します。フォルダの原子移動を保証する
folder=/path/to/directory #Starting directory
someerror=0 #Did we have an error?
#CD to directory. Does it even exist?
cd $folder
RETVAL=$?
[ $RETVAL -eq 0 ] && echo Success changing directory to $folder && mainfolderexist=1
[ $RETVAL -ne 0 ] && echo Failure changing directory to $folder && mainfolderexist=0
if [ $mainfolderexist -eq 1 ]; then
shopt -s nullglob
for dir in $folder/*/
do
thedirname=`basename $dir` #Get directory name
#cd to sub dir. Does it even exist?
cd $dir
RETVAL=$?
[ $RETVAL -eq 0 ] && echo Success changing directory to $dir && subfolderexist=1
[ $RETVAL -ne 0 ] && echo Failure changing directory to $dir && subfolderexist=0
if [ $subfolderexist -eq 1 ]; then
#perform some operation on all files in this directory
someApp -someArgs --name=$thedirname *
else #sub folder doesn't exist
someerror=1
break
fi
#next folder
done
else #main folder doesn't exist
someerror=1
fi
#REPEAT (only if no errors occured)
if [ $someerror -eq 0 ]; then
at now + 1 minutes << END
/bin/bash "$0" "[email protected]"
END
fi
私はこれを使用する方法、私は/home/incoming
のようなフォルダに、SFTPを使用してサーバにディレクトリをアップロードして、ディレクトリが完全にアップロードされると、私は/path/to/directory
に移動します。今これは私が心配している部分です。
これまでのところ、私はXX:XX:02とXX:XX:50の間でディレクトリを移動するようにしてきましたが、これも必要ですか?私はシステムの時間を考慮せずにアップロード+移動プロセスを自動化したいと思っています。
- ディレクトリが移動中(
mv "somedir" "/path/to/directory/somedir"
)XX:00に移動していて、スクリプトが実行され、すべてのディレクトリをループするとどうなりますか? - mvコマンド実行中にシステムの電源が切れた場合はどうなりますか?ディレクトリが半分に移動した場合などは、上記のスクリプトを実行する前にこれを確認するスクリプトを作成する必要があります。
これは、ディレクトリが「完全にアップロードされた」ときはどのように分かりますか? – larsks
あなたのソースとデスティネーションが同じファイルシステム上にあるかどうか知っていますか?そうでない場合は、部分的にしかコピーされていないディレクトリにアクセスしないように、cronジョブに情報を追加する必要があります。 – ghoti
@larsks私はそうではありません。だからこそ私は今、手動でやっています。私は、サーバーがディレクトリから何を期待しているのかを知り、アップロードを開始し、予想が本当のことと一致したときにディレクトリを移動させるプログラムを書くつもりです。あなたがより良い選択肢を持っていない限り、そういうことですか? – natli