複数のレポートを生成する方法は?今は毎日のレポートだけを受け取ります。

複数のレポートを生成する方法は?今は毎日のレポートだけを受け取ります。
#!/bin/bash
#--------------------------------------------------------------------------

daily="FILE_PATH/Daily"
weekly="/FILE_PATH/Weekly"
semianually="/FILE_PATH/SemiAnnually"

_endDate=$(date +"%m%d%Y")
_day=$(date +"%u")

if [ $_day -ge 1  ] || [ $_day -le 7 ]
then
    backNumDays="180"
    directory=$semianually
    _beginDate=$(date -d "183 days ago" +"%m%d%Y")
    report="$_beginDate-$_endDate"SemiAnnualReport".csv"
else
    :
fi

if [ $_day -ge 1  ] || [ $_day -le 7 ]
then
    backNumDays="7"
    directory=$weekly
    _beginDate=$(date -d "7 days ago" +"%m%d%Y")
    report="$_beginDate-$_endDate"WeeklyReport".csv"
else
    :
fi

if [ $_day -ge 1  ] || [ $_day -le 7 ]
then
    backNumDays="1"
    directory=$daily
    _beginDate=$(date -d "1 day ago" +"%m%d%Y")
    report="$_beginDate-$_endDate"DailyReport".csv"
fi


#_____sql query_______
exec_file_Report()
    {

    status=`/SIDS/app/oracle/product/12.1.0.2/client/bin/sqlplus -S << +++
    $DB_CONNECT
    --
    SET head on
    SET feedback OFF
    SET pagesize 10000
    SET linesize 2000;
    SET colsep ,
    set trimspool on
    set trimout on
    set trims on
    set UNDERLINE OFF
    set verify off
    set echo off
    set term off

    spool "$directory/$report"

    SELECT * FROM TABLE_NAME WHERE rownum <= $backNumDays
        ;
    spool off
    exit
+++
`
}

exec_file_Report 

毎日のレポートが生成される理由がわかりません。 cronは、毎日、日曜日、毎週、毎月最後の日、半年ごとに実行するように設定されています。すべてのifに同じパラメータを使用する理由は、複数の状況が発生した場合(たとえば、日曜日が月の最後の日でもある場合)にコードをテストするためです。

答え1

何かが欠けているかもしれませんが、スクリプトが実行されるたびに3つのレポートをすべて生成したいと思います(このテストバージョン)。ただし、1回の呼び出しで複数のレポートを生成するようにスクリプトが設定されていません。スクリプトの実行時に発生する一般的なフローは次のとおりです。

もし(条件は常に真)
それから
    returnNumDays="180"
    ディレクトリ = "$半年"
その他
    :
フィリピン諸島

もし(条件は常に真)
それから
    戻り日数 = "7"
    ディレクトリ="毎週$"
その他
    :
フィリピン諸島

もし(条件は常に真)
それから
    戻り日数 = "1"
    ディレクトリ="$daily"
フィリピン諸島


(毎日のレポート生成)

あなたは次のことをする必要があります

(定義 実行ファイルの報告 機能)

もし(今月の最後の日です)
それから
    returnNumDays="180"
    ディレクトリ = "$半年"
    実行ファイルの報告
フィリピン諸島

もし(今日は日曜日です)
それから
    戻り日数 = "7"
    ディレクトリ="毎週$"
    実行ファイルの報告
フィリピン諸島

戻り日数 = "1"
ディレクトリ="$daily"
実行ファイルの報告

このスクリプトできる1 つの通貨で 3 つのレポートをすべて生成します。たとえば、2月10日、2月17日、2月24日、3月3日、3月10日、3月17日、3月24日(毎週日曜日)に毎月、毎日のレポートが作成されます。半期報告書と日報は2月28日に作成される予定だ。 3月31日日曜日には3つすべてが達成されます。したがって、毎日スクリプトを実行するだけです。 3つのcronラインは必要ありません。

ここで、上記の報告日のうち、日次報告書は午後2時に生成され、他の報告書は午後11時59分に生成されることを想定しています。これらの詳細は、私が説明を求めるときに質問に含める必要がありました。この問題を解決するには、スクリプトをよりスマートにまたはよりスマートにする必要があります。あまり賢くすることをお勧めします。代わりに変えてください調べるどのレポートを生成したいのですが、パラメータを使用してどのレポートを生成するかを教えてください。このような:

(定義 実行ファイルの報告 機能)

ケース '$1'
     (6ヶ月に1回)
        returnNumDays="180"
        ディレクトリ = "$半年"
        実行ファイルの報告
        ;;;

     (週間)
        戻り日数 = "7"
        ディレクトリ="毎週$"
        実行ファイルの報告
        ;;;

    (毎日)
        戻り日数 = "1"
        ディレクトリ="$daily"
        実行ファイルの報告
        ;;;
イサク

次に、現在持っているcrontabエントリを維持し、パラメータを追加します。

0 14 * * * /パス/to/your/script毎日
59 23 * * 0 /パス/to/your/script週間
59 23     (最後)   * * /パス/to/your/script6ヶ月に1回

うーん - 毎月末にジョブを実行するためにcronをどのように使用しますか?

警告:上記をテストしていません。

メモ:

  • これを行う理由はありませんelse   :
  • if毎回実行したいコードに対して常にtrueの条件をテストするためにanを使用する理由はありません。
  • execUnix システム関数およびシェルコマンドの名前です。これを関数名の一部として使用すると混乱する可能性があります。

関連情報