昨日のログを外部APIを介してダウンロードしようとしています。APIの場合、入力パラメーターとして&からの日付範囲を指定する必要があります。
APIから、呼び出しごとに最大1時間のログをダウンロードできます。
だから私が昨日完全なログをダウンロードしたい場合。昨日の日付(1時間ごと)でAPIを24回呼び出す必要があります。
注APIはGMT時間のみをサポートします。したがって、GMT時間を提供する必要があります。
例: https://abcd.com/logs?start=FROM_DATE&end =TO_DATE
このスクリプトはcronスケジュールに追加するので、毎日トリガーされ、昨日24時間ログが完了してダウンロードされます。
キーポイントは
下記の回答はエラーを投げています。私はこのスクリプトから始めました。現在の時刻を考慮してループを実行しています。その代わりに、ループは00:00:00GMT時間で開始する必要があります。
#!/bin/bash
FROM_DATE=$(date -u -d "1 day ago" +%Y-%m-%d"T"%H":00:00""Z")
for i in {0..3}
do
echo "FROM_DATE : $FROM_DATE"
TO_DATE=$(date -u +%Y-%m-%d"T"%H":59:59""Z" -d "1 day ago""$date + $i hour")
echo "TO_DATE : $TO_DATE"
FROM_DATE=$(date -u +%Y-%m-%d"T"%H":00:00""Z" -d "1 day ago""$date + $i hour""$date + 1 hour")
done
これを試して。
#!/bin/bash
#
yesterday=$(date --utc --date 'yesterday' +'%Y-%m-%d')
for hour in {0..23}
do
printf "https://abcd.com/logs?start=%sT%02d:00:00Z&end=%sT%02d:59:59Z\n" $yesterday $hour $yesterday $hour
done
ときどきうるう秒は処理されません。それが必要な場合は、1日の最後の範囲を23:00:00
から23:59:60
にする必要がある場合に、このより複雑なコードを使用しますが、ターゲットアプリケーションもこれを処理できることを確認してください。
#!/bin/bash
#
yesterday=$(date --utc --date 'yesterday' +'%Y-%m-%d')
leapsecond=$(date --utc --date @$(( $(date --utc --date '00:00:00' +%s) -1 )) +'%S')
lastsecond=59
for hour in {0..23}
do
[[ hour == 23 ]] && lastsecond=$leapsecond
printf "https://abcd.com/logs?start=%sT%02d:00:00Z&end=%sT%02d:59:%02dZ\n" $yesterday $hour $yesterday $hour $lastsecond
done
期待どおりの出力が得られます。
#!/bin/bash
for i in {00..23}
do FROM_DATE=$(date -u -d "1 day ago" +%Y-%m-%d"T"$i":00:00Z")
echo "FROM_DATE:" $FROM_DATE | tr -d '\r'
TO_DATE=$(date -u +%Y-%m-%d"T"$i":59:59Z" -d "1 day ago")
echo "TO_DATE : $TO_DATE" | tr -d '\r'
done
あなたの助けをどうもありがとう