У меня есть общий ресурс Samba на моем NAS-накопителе:
mount -t smbfs -o username=backup,password=backups_password //sharebox/SVNBackup /mnt/SVNBackup
Затем я пытаюсь запустить:
sudo svnadmin dump /usr/local/svn/repos/testrepo > /mnt/SVNBackup/test1.svn
но я получаю:
bash: /mnt/SVNBackup/test1.svn: в разрешении отказано
Расположение резервной копии настроено так, чтобы принимать доступ только от пользователя «резервная копия» (которого нет в локальной системе).
Как мне решить эту проблему? Спасибо
sudo command > outputfile
не делает то, что вы думаете. В частности, выходной файл открывается с ваш разрешения, а не пользователя sudo (в данном случае root). Вот почему это работает, когда вы становитесь root и запускаете команду - потому что тогда перенаправление запускается как root, который может писать в / mnt / SVNBackup. Это необходимо и разумно, чтобы sudo вел себя подобным образом.
Найдите способ запустить всю команду от имени пользователя root; поместите его в cron root или напишите однострочный сценарий оболочки и вызовите который с помощью sudo или найдите другое исправление, которое подойдет вам. В предельном (и немного глупом) случае
sudo svnadmin dump /usr/local/svn/repos/testrepo | sudo tee /mnt/SVNBackup/test1.svn
должен производить вывод обе на стандартный вывод и в файле /mnt/SVNBackup/test1.svn
. Как ни странно это может показаться, если вам действительно не нужен результат, самым простым способом может быть
sudo svnadmin dump /usr/local/svn/repos/testrepo | sudo tee /mnt/SVNBackup/test1.svn > /dev/null
Если исходная команда svnadmin производит что-то на STDERR, и вы хотите, чтобы это тоже было в файле журнала, попробуйте
sudo svnadmin dump /usr/local/svn/repos/testrepo 2>&1 | sudo tee /mnt/SVNBackup/test1.svn > /dev/null
Обратите внимание, что 2>&1
является форумом bash, если ваша оболочка является csh-вариантом или чем-то другим, вам нужно найти что-то подходящее.