
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.