2012-04-10 47 views
3

我试图执行一个shell脚本来运行一个'rsync'进程,将服务器上的本地目录同步到安装在同一台服务器上的NFS挂载。我将脚本作为“root”运行,即'sudo进入有权写入NFS挂载的用户,并运行另一个执行'rsync'的shell脚本。rsync脚本的作品,但不是当通过cron预定时

当我以“root”身份手动运行此脚本时,脚本成功运行。但是,当我安排脚本通过'cron'运行时,'rsync'进程开始,但不完成,停止在构建文件列表的阶段。

这是剧本, “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”。

这是'fstab文件条目NFS挂载:

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

预先感谢任何帮助,您可以提供。

+0

我在使用'$。/ the_script.sh'语法的非linux文件系统中运行脚本时遇到了问题。问题是我无法将该脚本标记为FAT文件系统中的可执行文件。必须像'$ bash the_script.sh'那样运行它' – heltonbiker 2012-04-10 02:00:28

+0

那些反向的'rsync'命令行是否会出现SO错误或者是您实际脚本中的反向错误? – sarnold 2012-04-10 02:06:28

+0

这是一个远射,但是你运行[强制访问控制](http://en.wikipedia.org/wiki/Mandatory_access_control)系统,如[AppArmor](http://wiki.ubuntu.com)/AppArmor /),[SELinux](http://en.wikipedia.org/wiki/Security-Enhanced_Linux),[TOMOYO](http://tomoyo.sourceforge.jp/index.html.en)或[SMACK ](http://schaufler-ca.com/)?由于cron(8)'用完了,任何这些都可能导致脚本在不同的保护域中执行。对于看起来相关的日志消息,请检查'dmesg(1)'或'/ var/log/audit/audit.log'。 – sarnold 2012-04-10 02:09:05

回答

0

关于你的根crontab指定

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

什么?

相关问题