我有一个VM集群,CentOS7上有3个节点,RHEL7上有一个节点。有一个启用rsync的目录,/mnt//portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/api/ incrontab设置如下。
$ incrontab -l
/mnt//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//portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/
#Destination folder
gateway=/mnt//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 < =========== " >> $LOG
rsync --delete -arv $portal $gateway >> $LOG
) 10> /var/rsync/.rsync.lock
echo " ========== $(date -Iseconds) Release Lock acquired by local thread =========== " >> $LOG下面是日志文件
entered the script
entered the script基本上,对portal所做的任何更改都应该反映到gateway上。我在portal目录中创建了一个临时文件。但它并不反映在gateway目录中。这仅适用于新的RHEL 7 VM。旧的CentOS 7 VM可以很好地处理相同的脚本。
发布于 2020-05-06 15:04:14
我建议您通过在第2行添加一个新命令来启用对日志文件/tmp/errors的错误报告。将其扩展一点,我们将得到这个修改,该修改将预期的输出和意外错误捕获到单个文件/tmp/output:
#!/bin/sh -ex
exec >/tmp/output 2>&1
#source folder
portal=/mnt//portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/
...在生产环境中,可以写入更好定义的日志文件,甚至使用系统记录器(man logger获取详细信息)。
当执行返回不成功状态(非零退出代码)的命令时,shell -e标志将使其退出。在shell退出时,错误日志将捕获由于任何错误而生成的输出。-x标志支持跟踪--也可以跟踪日志文件。
在评论中,您确定“RHEL 7的/var中没有rsync目录”。
因此,您的脚本没有在RHEL 7上工作是因为您没有创建脚本所需的这个目录。脚本试图写入/var/rsync/.rsync.lock,但它无法写入,因为父目录不存在。
解决方案是创建目录并确保执行脚本的UID可以写入该目录。更好的方法是修改脚本,以便在目录不存在的情况下创建目录,或者以某种方式报告此错误,这些错误可以被捕获并提供给真实的人使用。
https://unix.stackexchange.com/questions/584890
复制相似问题