当要采取的操作位于远程服务器上时,Inotifywait 不执行

当要采取的操作位于远程服务器上时,Inotifywait 不执行

我正在尝试使用 inotifywait 监视文件创建,并在每次创建文件时执行一个长脚本。当要执行的操作在同一台服务器上时,一切都运行顺利。但是当需要在远程服务器上执行某些操作时,即使在受监控目录中创建了 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

这不起作用(涉及与另一台服务器的交互)。即使创建了 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 

            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 

完毕

相关内容