exec cp falha no script, mas funciona quando emitido diretamente

exec cp falha no script, mas funciona quando emitido diretamente

Eu tenho um script que copia backups SQL para um servidor Windows. Aqui está a linha de /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

Aqui está o script de backup:

backup.sh:

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

Logado com privilégios de root (neste caso, como root)

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

No entanto, se eu emitir o comando a partir de um prompt, e não por meio do script:

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

Os arquivos são copiados conforme esperado. Novamente, logado como root aqui.

O que poderia estar causando a falha do comando no script, mas o comando idêntico funcionou no console?

Responder1

Você não diz que tipo de máquina é essa, mas minha primeira observação é que você não tem uma linha de interpretação em seu backup.sh para especificar qual programa deve executá-la. Você quer algo assim:

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

find....your stuff..here

Agora, isso por si só não resolve sua questão de permissão, mas vai ajudar. Pode haver um arquivo .rc para todo o sistema que seu shell estava fornecendo que especificava um comando find diferente ou quem sabe o que ele fez. Ao especificar o intérprete, você pode examinar os arquivos init desse intérprete. Além disso, seu ambiente de login pode ter um ambiente que o script não possui.

informação relacionada