exec cp завершается ошибкой из скрипта, но работает при непосредственном запуске

exec cp завершается ошибкой из скрипта, но работает при непосредственном запуске

У меня есть скрипт, который копирует резервные копии SQL на сервер Windows. Вот строка из /etc/fstab:

//my.win.box/share$ /winshare   cifs    credentials=/etc/credfile,dom=mydomain,uid=0,gid=0,file_mode=0600,dir_mode=0700 0 0

Вот скрипт резервного копирования:

резервное копирование.sh:

# copy zipped sql exports to /winshare/db
find /backups/sql/*sql.gz -mtime +1 -exec cp {} /winshare/db \;

Выполнен вход с правами root (в данном случае как root)

$ ./backup.sh
cp: cannot create regular file `/winshare/db/mydb_20130301.sql.gz': Permission denied

Однако если я введу команду из командной строки, а не через скрипт:

$ find /backups/sql/*sql.gz -mtime +1 -exec cp {} /winshare/db \;

Файл(ы) скопированы, как и ожидалось. Опять же, зашел как root здесь.

Что может быть причиной сбоя команды в скрипте, но при этом та же команда работает из консоли?

решение1

Вы не говорите, что это за машина, но мое первое наблюдение: у вас нет строки интерпретатора в вашем backup.sh, чтобы указать, какая программа должна ее запускать. Вы хотите что-то вроде этого:

#!/bin/bash
export PATH=/bin:/usr/bin

find....your stuff..here

Теперь, это само по себе не решит ваш вопрос о разрешениях, но это поможет. Может быть системный .rc-файл, который ваша оболочка использовала, который указал другую команду find или кто знает, что он сделал. Указав интерпретатор, вы можете затем посмотреть файлы инициализации этого интерпретатора. Кроме того, ваша среда входа может иметь среду, которой нет у скрипта.

Связанный контент