rsync 腳本在 CentOS 7 上工作,相同的腳本在 RHEL 7 上不工作
我有一個 VM 集群,在 CentOS7 上有 3 個節點,在 RHEL7 上有一個節點。有一個啟用 rsync 的目錄
/mnt/<server_IP>/portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/api/
incrontab 設置如下。$ 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 虛擬機使用相同的腳本可以正常工作。
/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
了解詳細資訊)。
-e
一旦執行返回非成功狀態(非零退出程式碼)的命令,shell標誌就會使其退出。錯誤日誌將擷取由於任何錯誤而生成的輸出,就像 shell 退出一樣。該-x
標誌啟用跟踪 - 也可以跟踪日誌文件。在您確定的評論中,“ RHEL 7**內部沒有 rsync 目錄
/var
”。因此,您的腳本無法在 RHEL 7 上執行的原因是您尚未創建該腳本所需的目錄。該腳本嘗試寫入,
/var/rsync/.rsync.lock
但由於父目錄不存在,因此無法寫入。解決方案是創建目錄並確保執行腳本的 UID 可以寫入。更好的是,修改腳本以創建該目錄(如果該目錄尚不存在),或者以某種可以擷取並可供真人使用的方式報告此錯誤。