我正在尝试执行一个shell脚本来运行'rsync'进程,该进程将服务器上的本地目录同步到安装在同一服务器上的NFS挂载。我正在运行一个脚本作为“root”,即'sudo'进入有权写入NFS挂载的用户,并运行另一个执行'rsync'的shell脚本。
当我以“root”手动运行此脚本时,脚本会成功运行。但是,当我安排脚本通过'cron'运行时,'rsync'进程开始,但没有完成,在构建文件列表的阶段停止。
这是我以“root”身份运行的脚本“exec_NFS_rsync.sh”:
#!/bin/bash
sudo -u nfsuser /path/to/scripts/nfs_rsync/scripts/NFS_rsync.sh
这是“NFS_rsync.sh”的内容:
#!/bin/bash
##
## VARIABLES
##
# rsync binary
rsync="/usr/bin/rsync"
# Source
sourcedir="/path/to/source/files/"
# Destination
destdir="/path/to/destination/nfs/mount/"
# Exclude
exclude="--exclude=*.tmp --exclude=tmp/ --exclude=*.lck"
# Log file
log_file="/path/to/log/folder/NFS_rsync.log"
##
## SCRIPT
##
# Check if the log file exists
if [ ! -e $log_file ]; then
touch $log_file
fi
if [ ! -d $destdir ]; then
echo "Log destination directory doesn't seem to exist. Please investigate"
exit 2
fi
# Start entry in the log
echo "$(date "+%Y-%m-%d %k:%M:%S") - Local Storage to NFS Sync started." >> $log_file
# Start sync NFS to Local
`$rsync -av --stats --delete $exclude $sourcedir $destdir >> $log_file`
echo "$(date "+%Y-%m-%d %k:%M:%S") - Local Storage to NFS Sync completed." >> $log_file
# End entry in the log
echo "" >> $log_file
exit
这是我从'cron'运行时收到的输出:
2012-04-05 16:20:01 - Local Storage to NFS Sync started.
building file list ... 2012-04-05 16:20:01 - Local Storage to NFS Sync completed.
请注意,“建筑文件列表”永远不会标记为“已完成”。
不会进行文件传输。
这是'crontab'条目:
*/10 * * * * /path/to/scripts/nfs_rsync/scripts/exec_NFS_rsync.sh
如果我手动运行它,我会得到完整的详细输出并且传输成功完成,然后显示统计数据(我不会包括它,因为它很长)。
我不认为这是一个权限问题,因为我可以从shell执行“exec_NFS_rsync.sh”脚本作为“root”,也可以直接执行“NFS_rsync.sh”脚本作为“nfsuser” ”
这是NFS挂载的'fstab'条目:
nfsfiler:/path/to/nfs/mount /path/to/destination/nfs/mount/ nfs hard,intr,nfsvers=3,rw,rsize=32768,wsize=32768 0 0
提前感谢您提供的任何帮助。
答案 0 :(得分:0)
如何指定
*/10 * * * * su - l nfsuser -c /path/to/scripts/nfs_rsync/scripts/NFS_rsync.sh
你的root crontab中的?