外部APIを介して昨日のログをダウンロードしようとしています。 APIの場合は、&から日付範囲を入力パラメーターとして指定する必要があります。
APIから呼び出しごとに最大1時間のログをダウンロードできます。
だから昨日の完全なログをダウンロードしたい場合。昨日の日付に基づいてAPIを24回(1時間に1回)呼び出す必要があります。
APIはGMT時間のみをサポートします。したがって、GMT時間を提供する必要があります。
たとえば:-https://abcd.com/logs?start=日付から&end=これまで
- 最初のサイクル以下のようにする必要があります。
- https://abcd.com/logs?start=2018-04-29T00:00:00Z&end=29-04-2018T00:59:59Z
- 2番目のループ以下のようにする必要があります
- https://abcd.com/logs?start=2018-04-29T01:00:00Z&end=29-04-2018T01:59:59Z
- 最後のループ以下のように、
- https://abcd.com/logs?start=2018-04-29T23:00:00Z&end=2018-04-29T23:59:59Z
このスクリプトをcronスケジュールに追加して毎日実行し、昨日の24時間ログのダウンロードが完了するようにします。
コアは
- いつも昨日の日
- 形式GMT
- 24サイクル
以下の回答ではエラーが発生します。現在の時間を考慮してループを実行するこのスクリプトから始めます。代わりに、ループはGMT時間00:00:00に開始する必要があります。
#!/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
ベストアンサー1
この試み。
#!/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