Shell / Bash: secuencia de comandos para continuar antes de que se ejecute el final de la línea

0

Tengo un shell / bash que funciona perfectamente para hacer un script de copias de seguridad, el problema es que tengo archivos grandes que están dando problemas para ejecutar el script. El script tiene q comprimir el archivo en tar.gzformato y lo hace, pero cuando viene en 6GB + o el script continúa comprimiendo el archivo pero va en las siguientes líneas y las copias de seguridad fallan, el servidor debe tener un set_time_limit;php igual, el archivo php que llama al shell / bash que uso set_time_limit (0);y funciona muy bien, el shell / bash también tiene algo?

La secuencia de comandos:

MYSQLDUMP="$(which mysqldump)"
$MYSQLDUMP -u $DBUSER -h $DBHOST -p$DBPASS $DBNAME | gzip > $TIMESTAMP.sql.gz

ssh $USER_SSH@$HOST_SSH "tar -zcf - $HOME" > $TIMESTAMP.backup.tar.gz

tar -zcf $TIMESTAMP.tar.gz $TIMESTAMP.backup.tar.gz $TIMESTAMP.sql.gz

SUCCESS=$?

rm $TIMESTAMP.sql.gz
rm $TIMESTAMP.backup.tar.gz

No publiqué las variables porque creo que no es necesario

Antes de que termine el alquitrán, elimina los 2 archivos con las líneas finales ... si el archivo tiene menos de 6 GB o 7 GB, no sucede esto

Alan PS
fuente
Etiquetó la pregunta solo con bash & shell. ¿Tiene alguna razón para creer que hay un problema solo con el script? Porque si no, debe explicar más cómo se invoca el script y usar otras etiquetas, como php.
Matei David
No veo nada malo con el guión. Cosas menores: $HOMEse expandirá localmente, no de forma remota, pero esto no explica el problema. Lo único que comprobaría es que no hay una configuración inusual RequestTTYen .ssh/config: yeso forcesería malo aquí.
Matei David

Respuestas:

0

Primero sería útil saber cómo estás invocando tu script php. En segundo lugar, en lugar de hacer que el script php haga el volcado de mysql, puede hacer que su script bash / shell lo haga y todo lo que hace su script php es invocarlo.

Ahora, dado que su script php se conecta a mysql, qué podría hacer con la modificación mínima a su script actual. En lugar de tener su script php, espere en el script bash. Simplemente haga que php invoque el script bash y se olvide de él de esta manera, no tiene que preocuparse de cuánto tiempo lleva.

En su script bash, haga que actualice una fila en mysql diciendo que tuvo éxito o falló después de que se haya comprimido, y si tiene su script bash haciendo el volcado, sería más seguro que tener un script php haciéndolo IE, sus credenciales para el DB nunca será accesible a través de la web, así que también recomiendo generar una clave privada para ssh para php. Luego, puede hacer que php lo revise más tarde con un script diferente y luego hacer otras cosas como informar visualmente que tuvo éxito, etc., verificando la base de datos para obtener los resultados.

Hay muchas maneras diferentes de resolver esto, desde usar PHP con pocos scripts diferentes, hasta usar bash para hacer más cosas, incluso incluir otros lenguajes como javascript para ayudar a actualizar dinámicamente su página para obtener los resultados para que no tenga que hacerlo. actualizar, etc.

Frostalf
fuente