
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.