4

我正在尝试执行一个 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 以“root”身份执行“exec_NFS_rsync.sh”脚本,也可以直接以“nfsuser”身份执行“NFS_rsync.sh”脚本。

这是 NFS 挂载的“fstab”条目:

nfsfiler:/path/to/nfs/mount /path/to/destination/nfs/mount/      nfs     hard,intr,nfsvers=3,rw,rsize=32768,wsize=32768 0 0

提前感谢您提供的任何帮助。

4

1 回答 1

0

怎么指定

*/10 * * * * su - l nfsuser -c /path/to/scripts/nfs_rsync/scripts/NFS_rsync.sh

在你的根 crontab 中?

于 2012-08-14T18:50:04.993 回答