Lo que estoy intentando escribir es un script de shell que hará una copia de seguridad de un sitio web y de todas las bases de datos MySQL que lo admiten. Encontré ejemplos en toda la red, pero cuando ejecuto el script en bash en una sesión SSH encarcelada, falla. Si escribo los comandos directamente en la sesión SSH, funcionan bien.
#!/bin/sh
DB1="first_db"
THEDATE=$(date +"%Y-%m-%d")
THEUSER=user
THEDBPW=password
mysqldump -u $THEDBUSER -p$THEDBPW $DB1 > dbbackup_$DB1_$THEDATE.sql
tar -czf sitebackup_website_$THEDATE.tar /home/website/public_html
gzip sitebackup_website_$THEDATE.tar
Este script se encuentra en el servidor web, por lo que, para fines de prueba, conecto SSH al servidor, cd
al directorio y ejecuto bash backup.sh
. mysqldump
no se conecta y parece no poder pasar la contraseña (devuelve un error informando "usando contraseña: NO"). Luego, el comando tar falla e informa que no puede iniciar /home/website/public_html
con "no existe tal archivo o directorio". tar
luego informa que está saliendo con un estado de error debido a errores anteriores.
¿Que me estoy perdiendo aqui?
Respuesta1
Verifique el script para ver los finales de línea de Windows iniciando sesión en el servidor y ejecutando
cat -v /path/to/script
Si la línea termina en ^M
, ese es el problema.
Puedes arreglar un archivo con finales de línea discontinuos ejecutando
dos2unix /path/to/script
Si dos2unix no existe en el servidor, puedes usar sed, así:
sed -i 's/\r$//' /path/to/script
Respuesta2
Ha asignado el nombre de usuario a la variable THEUSER
, pero su mysqldump
comando está usando la variable THEDBUSER
.
Respuesta3
tardir=$PWD ; cd /home/website/public_html &&
tar -czf "$tardir"/sitebackup_complete-office_"$THEDATE.tar"
o solo:
tar -C/home/website/public_html -czf \
sitebackup_complete-office_"$THEDATE.tar"
En general, muchos tars
no podrán trabajar con rutas absolutas a menos queinstrucciones explícitaspara hacerlo.
De forma predeterminada, GNU tar deja caer un encabezado
/
en la entrada o salida y se queja de los nombres de archivos que contienen un..
componente. Esta opción desactiva este comportamiento.
Es muy posible que ssh's
los comandos resuelvan las rutas de antemano dependiendo de la entrega del comando y las citas. Lo mismo es relevante para la expansión de las variables en sus nombres de ruta.
Respuesta4
Si entiendo correctamente su descripción del problema, la diferencia clave parece ser laencarceladoSesión SSH: los procesos que se ejecutan dentro de la sesión encarcelada no pueden ver fuera de su directorio de cárcel (a menudo, su hogar). Es por eso que no experimentas problemas en una sesión sin prisión. También podrías echarle un vistazo awikipedia entrada a la cárcelpara más detalles.