シェル スクリプトで前の日付のデータを取得するにはどうすればよいでしょうか?

シェル スクリプトで前の日付のデータを取得するにはどうすればよいでしょうか?

以下のスクリプトを参照してください。

#!/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 時にスケジュールすることはできません。午前 2 時まで MySQL サーバーにデータが入力されるためです。そこで、2 つの回避策を考えました。1 つは、前の日付のデータを取得することです。たとえば、今日が 2020 年 4 月 16 日の場合、スクリプトが今日午前 2 時に実行されると、2020 年 4 月 15 日のデータが取得されます。

または

私はこのスクリプトを、1 日の終わり、たとえば午後 11 時 58 分などにスケジュールします。

あなたの意見では、どの方法が最善の方法でしょうか。また、午後 11 時 58 分の cron ジョブを教えていただけますか。

以前の日付のデータを取得することを検討している場合は、それを取得するための変更を加える必要があります。

ありがとう、敬具、サガール・マンダル

答え1

あなたの場合、クエリがいつ開始されたかに関係なく、1 日のレコードを取得するようにクエリを制限します。そうすれば、午前 2 時またはいつでも開始できます。そうすれば、実行されるはずだった時間に何か問題が発生した場合、後でスクリプトを手動で実行できます。

スクリプト内の where 条件を次のように変更します。

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

そうすれば、昨日の日付のレコードのみが取得されます。

bash 変数を使用して実行する場合は、MySql に適した形式で現在の日付を取得します。

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

の出力は、$dateMySql で認識できる形式になります。

2020-04-16

次に、次のような where 条件を作成します。

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

を変更するとinterval -1 day、任意の日付のデータを取得できます。


そしてもう1つ。スクリプトからMySqlにユーザー名とパスワードを提供しないでください。そうすると、パスワードが明らかになり、遅かれ早かれ後悔することになります。mysql_config_editor(参考:) を使用して資格情報を保存し、後でスクリプト内で使用できるようにします。

関連情報