rsync 脚本在 CentOS 7 上工作,相同的脚本在 RHEL 7 上不起作用

rsync 脚本在 CentOS 7 上工作,相同的脚本在 RHEL 7 上不起作用

我有一个虚拟机集群,在 CentOS7 上有 3 个节点,在 RHEL7 上有 1 个节点。在crontab中有一个启用rsync的目录,/mnt/<server_IP>/portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/api/ 设置如下。

$ incrontab -l
/mnt/<server_IP>/portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/api/ IN_MODIFY,IN_ATTRIB,IN_CREATE,IN_DELETE /mnt/rsync/rsync-for-carbon-depsync.sh

启用调试的 rsync 脚本

#!/bin/sh -ex
#source folder
portal=/mnt/<server_IP>/portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/
#Destination folder
gateway=/mnt/<server_IP>/gateway/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default
LOG=/log/rsync/carbon-rsync-logs/"log-local-$(date +%Y%m%d_%H%M%S).log"

echo "entered the script" >> $LOG

#keep a lock to stop parallel runs
(
echo "entered the flock" >> $LOG
flock -e 10
echo "Obtained the lock" >> $LOG
echo " ========== $(date -Iseconds) Lock acquired by local thread <server_IP>< =========== " >> $LOG
rsync --delete -arv $portal   $gateway  >>  $LOG
) 10> /var/rsync/.rsync.lock
echo " ========== $(date -Iseconds) Release Lock acquired by local thread <server_IP> =========== " >> $LOG

下面是日志文件

entered the script
entered the script

基本上,无论所做的更改都portal应该反映在gateway.我在portal目录中创建了一个临时文件。但它不会反映在gateway目录中。这仅适用于新的 RHEL 7 VM。旧的 CentOS 7 VM 使用相同的脚本可以正常工作。

答案1

/tmp/errors我建议您通过在第二行添加新命令来启用向日志文件报告错误。稍微扩展一下,我们进行了此修改,将预期输出和意外错误捕获到单个文件中/tmp/output

#!/bin/sh -ex
exec >/tmp/output 2>&1

#source folder
portal=/mnt/<server_IP>/portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/
...

在生产环境中,人们会写入更好定义的日志文件,甚至使用系统记录器(man logger了解详细信息)。

shell-e标志会使其在执行返回非成功状态(非零退出代码)的命令后立即退出。错误日志将捕获 shell 退出时因任何错误而生成的输出。该-x标志启用跟踪 - 也可以跟踪日志文件。

在一个评论你决定,“/varRHEL 7内部没有 rsync 目录”。

因此,您的脚本无法在 RHEL 7 上运行的原因是您尚未创建脚本所需的目录。该脚本尝试写入,/var/rsync/.rsync.lock但无法执行此操作,因为父目录不存在。

解决方案是创建该目录并确保执行脚本的 UID 可以写入该目录。更好的是,修改脚本以创建该目录(如果该目录尚不存在),或者以某种可以捕获并提供给真人的方式报告此错误。

相关内容