Я пытаюсь выполнить сценарий оболочки для запуска процесса «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
Заранее спасибо за любую помощь вы можете предоставить.
У меня возникла проблема с запуском скрипта в файловой системе, отличной от linux, с использованием синтаксиса '$./The_script.sh'. Проблема заключалась в том, что я не мог пометить скрипт как исполняемый файл в файловой системе FAT. Должно было запускать его, как '$ bash the_script.sh' – heltonbiker
Являются ли эти обратные вызовы командной строки' rsync' ошибкой входа в SO или являются ли эти обратные вызовы в вашем реальном скрипте? – sarnold
Немного длинный снимок, но вы используете [обязательный контроль доступа] (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