2012-04-10 3 views
3

Я пытаюсь выполнить сценарий оболочки для запуска процесса «rsync», который синхронизирует локальный каталог на сервере с монтированием NFS, установленным на том же сервере. Я запускаю скрипт как «root», что «sudo в пользователя, у которого есть разрешение на запись на монтирование NFS, и запускает другой сценарий оболочки, который выполняет« rsync ».скрипт 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 

Это выход я получаю при запуске от «хрон»:

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. 

Обратите внимание, что «здание список файлов» никогда не помечаются как «сделано».

Передача файла не происходит.

Это «кронтаб» запись:

*/10 * * * * /path/to/scripts/nfs_rsync/scripts/exec_NFS_rsync.sh 

Если я запустить его вручную, я получаю полный подробный вывод и переводы завершается успешно, а затем статистику представленных (я не буду включать его, потому что это длинный).

Я не верю, что это проблема с разрешениями, потому что я могу выполнить скрипт «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

У меня возникла проблема с запуском скрипта в файловой системе, отличной от linux, с использованием синтаксиса '$./The_script.sh'. Проблема заключалась в том, что я не мог пометить скрипт как исполняемый файл в файловой системе FAT. Должно было запускать его, как '$ bash the_script.sh' – heltonbiker

+0

Являются ли эти обратные вызовы командной строки' rsync' ошибкой входа в SO или являются ли эти обратные вызовы в вашем реальном скрипте? – sarnold

+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

ответ

0

насчет определения

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

в корневом кронтаб?

Смежные вопросы