2012-04-10 79 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 

什麼?

相關問題