我試圖執行一個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
預先感謝任何幫助,您可以提供。
我在使用'$。/ the_script.sh'語法的非linux文件系統中運行腳本時遇到了問題。問題是我無法將該腳本標記爲FAT文件系統中的可執行文件。必須像'$ bash the_script.sh'那樣運行它' – heltonbiker 2012-04-10 02:00:28
那些反向的'rsync'命令行是否會出現SO錯誤或者是您實際腳本中的反向錯誤? – sarnold 2012-04-10 02:06:28
這是一個遠射,但是你運行[強制訪問控制](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