Как извлечь данные предыдущей даты в скрипте оболочки?

Как извлечь данные предыдущей даты в скрипте оболочки?

Пожалуйста, ознакомьтесь со сценарием ниже.

#!/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"

Итак, этот скрипт в основном извлекает данные с сервера MySQL на текущую дату, и мне нужно запланировать этот скрипт так, чтобы он извлекал данные на текущую дату. Но проблема в том, что данные поступают непрерывно, поэтому я не могу просто запланировать его на 2 часа ночи, потому что он будет получать данные, введенные на сервер MySQL до 2 часов ночи. Поэтому я придумал два решения: либо я получаю данные за предыдущую дату, например, сегодня 16/04/2020, так что если скрипт запустится сегодня в 2 часа ночи, он извлечет данные за 15/04/2020.

или

Я планирую этот сценарий на конец дня, например, на 23:58 или что-то в этом роде.

По вашему мнению, какой способ лучше? Можете также подсказать мне задание cron на 23:58?

если я рассматриваю возможность получения данных за предыдущую дату, то для ее получения необходимо внести изменения.

Спасибо и с уважением, Сагар Мандал

решение1

Я бы в вашем случае определенно ограничил запрос таким образом, чтобы вы получали записи за один день, независимо от того, когда был начат запрос. Таким образом, вы можете запустить его в 2 часа ночи или когда угодно. Таким образом, вы можете запустить скрипт позже вручную, если что-то пошло не так в то время, когда он должен был быть выполнен.

В вашем скрипте измените условие where на что-то вроде этого:

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

Таким образом, вы получите только записи, имеющие вчерашнюю дату.

Если вы хотите сделать это с помощью переменных bash, получите текущую дату в форме, подходящей для MySql:

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

Вывод $dateимеет форму, распознаваемую MySql:

2020-04-16

Затем создайте условие where примерно так:

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

Если вы измените interval -1 day, вы сможете получить данные за любой день.


И еще одно. Не передавайте имена пользователей и пароли в MySql из скриптов. Так пароли будут раскрыты, и рано или поздно вы об этом пожалеете. Используйте mysql_config_editor(https://dev.mysql.com/doc/refman/8.0/en/mysql-config-editor.html) для хранения учетных данных и их последующего использования в скрипте, подобном вашему.

Связанный контент