¿Cómo recuperar datos de la fecha anterior en un script de shell?

¿Cómo recuperar datos de la fecha anterior en un script de shell?

Consulte el guión a continuación.

#!/usr/bin/bash

#scirpt to connect with db

master_db_user=''
master_db_passwd=''
master_db_port='3306'
master_db_host=''
master_db_name='uppcldashboard'

Now=$(date +"%d-%m-%Y")
date=$(date +"%F")


#Preparing script

#SQL_Query='select * from test_table;'

#MySql Command to connect to a database

#mysql -u$master_db_user -p$master_db_passwd -D$master_db_name -e "select * from uppcl_amount_details into outfile '/created_files/uppcl.csv' fields terminated by ',' lines terminated by '\n';"

mysql -u$master_db_user -p$master_db_passwd -D$master_db_name -e "select *,IFNULL(ref_4,0),IFNULL(ref_3,0),IFNULL(ref_7,0),IFNULL(ref_8,0),date_format(posting_date,'%Y-%m-%d') from uppcl_amount_details where posting_date>=CURDATE() into outfile '/created_files/uppcl.csv' fields terminated by ',' lines terminated by '\n';"

mv /created_files/uppcl.csv /created_files/offline_collection$Now.csv

sed -i "1i id","Cashier_id","Cheque_no","collection_amount","collection_type","Posting_date","Discom","Division_Code","Division_Name","Head_cashier_id","ref_3","ref_4","ref_5","ref_6","ref_7","ref_8","Tran_Date","Status","Posting_Updated_Date" /created_files/offline_collection$Now.csv
echo "End of the Script"

Bien, entonces este script básicamente obtiene datos de un servidor MySQL de esa fecha actual y tengo que programar este script para que obtenga datos de esa fecha actual. pero aquí está el problema de que los datos llegan de manera continua, por lo que no puedo programarlos para las 2 am de la mañana porque los datos se ingresarán en el servidor MySQL hasta las 2 am, así que pensé en dos soluciones posibles: Los datos de la fecha anterior, por ejemplo, hoy, son el 16/04/2020, por lo que si el script se ejecuta hoy a las 2 a. m. de la mañana, obtendrá los datos del 15/04/2020.

o

Programo este guión de tal manera que al final del día, como a las 11:58 pm o algo así.

En tu opinión, cuál es la mejor manera, también puedes decirme el cronjob de las 11:58 p.m.

Si considero obtener datos de la fecha anterior, entonces se deben realizar cambios para obtenerlos.

Gracias y saludos, Sagar Mandal.

Respuesta1

En su caso, definitivamente limitaría la consulta de esa manera para que obtenga registros de un día, sin importar cuándo se inicie la consulta. De esa manera, puedes iniciarlo a las 2 am o cuando sea. De esa manera, puede ejecutar el script más tarde manualmente si algo salió mal en el momento en que se suponía que debía ejecutarse.

En su secuencia de comandos cambie la condición donde a algo como esto:

where DATE(posting_date) = DATE(DATE_ADD(CURDATE(), INTERVAL -1 DAY))

De esa manera, obtendrá sólo registros que tengan una fecha de ayer.

Si desea hacerlo con variables de bash, obtenga la fecha actual en un formato adecuado para MySql:

date=$(date --rfc-3339=date)

La salida $datetiene el formato reconocible para MySql:

2020-04-16

Luego haz una condición donde algo como esto:

where DATE(posting_date) = DATE(DATE_ADD('$date', INTERVAL -1 DAY))

Si cambia el interval -1 day, podrá obtener los datos de cualquier día que desee.


Y una cosa más. No proporcione nombres de usuario y contraseñas a MySql desde scripts. De esa manera, las contraseñas se revelan y tarde o temprano te arrepentirás. Usar mysql_config_editor(https://dev.mysql.com/doc/refman/8.0/en/mysql-config-editor.html) para almacenar credenciales y usarlas más adelante en un script como el suyo.

información relacionada