4

シェルスクリプトを実行して、サーバー上のローカルディレクトリを同じサーバーにマウントされたNFSマウントに同期する「rsync」プロセスを実行しようとしています。NFSマウントへの書き込み権限を持つユーザーに「sudo」し、「rsync」を実行する別のシェルスクリプトを実行するスクリプトを「ルート」として実行しています。

このスクリプトを「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

手動で実行すると、完全な詳細出力が得られ、転送が正常に完了し、続いて統計が表示されます (長いので含めません)。

「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

ご協力いただきありがとうございます。

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 に答える