exec cp falla desde el script, pero funciona cuando se ejecuta directamente

exec cp falla desde el script, pero funciona cuando se ejecuta directamente

Tengo un script que copia copias de seguridad de SQL en un servidor de Windows. Aquí está la línea 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

Aquí está el script de respaldo:

copia de seguridad.sh:

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

Ha iniciado sesión con privilegios de root (en este caso, como root)

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

Sin embargo, si emito el comando desde un mensaje, en lugar de hacerlo a través del script:

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

Los archivos se copian como se esperaba. Nuevamente, inicie sesión como root aquí.

¿Qué podría estar causando que el comando en el script falle y, sin embargo, el comando idéntico funcione desde la consola?

Respuesta1

No dices qué tipo de máquina es esta, pero mi primera observación es que no tienes una línea de intérprete en tu backup.sh para especificar qué programa debe ejecutarla. Quieres algo como esto:

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

find....your stuff..here

Ahora, eso por sí solo no resuelve su pregunta sobre el permiso, pero ayudará. Es posible que haya un archivo .rc para todo el sistema que su shell estaba obteniendo y que especificaba un comando de búsqueda diferente o quién sabe qué hizo. Al especificar el intérprete, puede ver los archivos de inicio de ese intérprete. Además, su entorno de inicio de sesión puede tener un entorno que el script no tiene.

información relacionada