首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >rsync脚本在CentOS 7上工作,相同的脚本在RHEL 7上不工作

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

Unix & Linux用户
提问于 2020-05-06 10:17:36
回答 1查看 157关注 0票数 0

我有一个VM集群,CentOS7上有3个节点,RHEL7上有一个节点。有一个启用rsync的目录,/mnt//portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/api/ incrontab设置如下。

代码语言:javascript
运行
复制
$ 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脚本

代码语言:javascript
运行
复制
#!/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

下面是日志文件

代码语言:javascript
运行
复制
entered the script
entered the script

基本上,对portal所做的任何更改都应该反映到gateway上。我在portal目录中创建了一个临时文件。但它并不反映在gateway目录中。这仅适用于新的RHEL 7 VM。旧的CentOS 7 VM可以很好地处理相同的脚本。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-05-06 15:04:14

我建议您通过在第2行添加一个新命令来启用对日志文件/tmp/errors的错误报告。将其扩展一点,我们将得到这个修改,该修改将预期的输出和意外错误捕获到单个文件/tmp/output

代码语言:javascript
运行
复制
#!/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可以写入该目录。更好的方法是修改脚本,以便在目录不存在的情况下创建目录,或者以某种方式报告此错误,这些错误可以被捕获并提供给真实的人使用。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/584890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档