inotifywaitを使用してファイルの生成を監視し、ファイルが生成されるたびに長いスクリプトを実行しようとしています。実行するタスクが同じサーバー上にある場合は、すべてがスムーズに実行されます。ただし、リモートサーバーで何かを行う必要がある場合は、監視対象のディレクトリに2つのファイルが作成されていても、そのタスクは一度だけ実行されます。
これは効果がありますファイルが2つ以上作成されても同じです。 :
d="path/dir/path/"
inotifywait -m -e create --format '%f' "${d}" | while read FILENAME
do
IFS='-' read -r -a action <<< $FILENAME
if [ ${action[0]} = "dothing" ]
then
rsync -r -v /var/www/site1.com/sub/ /var/www/site2.com/sub/
fi
done
これはうまくいきません(他のサーバーとの対話が含まれます)。複数のファイルが作成されても一度だけ実行されます。
d="path/dir/path/"
inotifywait -m -e create --format '%f' "${d}" | while read FILENAME
do
IFS='-' read -r -a action <<< $FILENAME
if [ ${action[0]} = "dothing" ]
then
ssh root@server2ip "rsync -r -v root@server1ip:/var/www/site1.com/sub/ /var/www/site2.com/sub/"
fi
done
答え1
追加しました0<&-私のコマンドの終わりに働いた。
d="path/dir/path/"
inotifywait -m -e create --format '%f' "${d}" | while read FILENAME
do
IFS='-' read -r -a action <<< $FILENAME
if [ ${action[0]} = "dothing" ]
then
ssh root@server2ip "rsync -r -v root@server1ip:/var/www/site1.com/sub/ /var/www/site2.com/sub/" 0<&-
fi
完璧