我必须每分钟轮询远程服务器并复制文件,如果文件是从上次修改的话。我不能使用&rs; rsync'。所以我遵循的方法是每分钟轮询服务器,将文件放在临时目录中,如果它被修改,则将其复制到实际目录。以下是该代码。
while true
do
scp -pq ${SFTP_USER}@${SFTP_SERVER}:${SFTP_PATH}/${FILE_NAME} ${PUT_TEMP_SFTP_PATH} 2>/dev/null
mododTime=$(date +%s -r ${PUT_TEMP_SFTP_PATH}/${FILE_NAME})
if [[ "${mododTime}" -gt "${lastModTime}" ]]
then
cp -p ${PUT_TEMP_SFTP_PATH}/${FILE_NAME} ${PUT_ACTUAL_SFTP_PATH}/${FILE_NAME}
lastModTime=$mododTime
echo "Copying modified file"
fi
sleep 1
done
我想在两个方面提供帮助:
1.在我的方法中,我每次都要复制文件以获得修改后的时间戳。我可以在没有实际复制的情况下获得该时间戳吗?
2.我想知道如何通过某些操作从外部杀死脚本(比如另一个bash脚本,即我的杀戮工作),比如ps后跟grep(我面临的一个问题是ps显示进程名称为bash ,所以我无法确切地确定这个过程。
答案 0 :(得分:2)
无需复制。您使用的是scp
,因此您显然可以使用ssh
。 ssh
将命令作为参数在远程主机上执行。因此,您只需stat
远程计算机上ssh
上的文件,并在本地与 mod时间进行比较,例如
if [ $(ssh host "stat -c %Y /path/to/remote/file") -gt $(stat -c %Y /localfile) ]
then
scp "your remote file"
fi
如果您已为远程主机建立了公钥/私钥无密码登录,则会有所帮助。如果没有,有很多可用的方法。