如何生成多个报告?我现在只收到每日报告

如何生成多个报告?我现在只收到每日报告
#!/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

也许我遗漏了一些东西,但我想您希望脚本(的这个测试版本)在每次运行时生成所有三个报告。但该脚本并未设置为在一次调用中生成多个报告。运行脚本时发生的一般流程是

如果(条件始终为真)
然后
    返回NumDays =“180”
    目录=“$半年”
别的
    :

如果(条件始终为真)
然后
    返回天数=“7”
    目录=“每周$”
别的
    :

如果(条件始终为真)
然后
    返回天数=“1”
    目录=“$每日”


(生成日报)

你需要做类似的事情

(定义 执行文件报告 功能)

如果(这是该月的最后一天)
然后
    返回NumDays =“180”
    目录=“$半年”
    执行文件报告

如果(今天是星期日)
然后
    返回天数=“7”
    目录=“每周$”
    执行文件报告

返回天数=“1”
目录=“$每日”
执行文件报告

这个脚本在一次调用中生成所有三个报告。例如2月10日、2月17日、2月24日、3月3日、3月10日、3月17日、3月24日(均为星期日),会做月报和日报。 2月28日编制半年度报告和日报。 3 月 31 日星期日,这三件事都会完成。所以你只需要每天运行该脚本即可;你不需要三个 cron 行。

现在您说,在上述任何一个多报告日,您希望每日报告在下午 2 点生成,其他报告在晚上 11:59 生成。当我要求澄清时,这些细节应该包含在问题中。为了解决这个问题,您必须使脚本变得更智能或更不智能。我建议让它变得不那么聪明。改变它,而不是弄清楚本身要生成什么报告,而是采用一个参数告诉它要生成哪个报告。像这样的东西:

(定义 执行文件报告 功能)

案例“$1”
     (半年一次)
        返回NumDays =“180”
        目录=“$半年”
        执行文件报告
        ;;

     (每周)
        返回天数=“7”
        目录=“每周$”
        执行文件报告
        ;;

    (日常的)
        返回天数=“1”
        目录=“$每日”
        执行文件报告
        ;;
埃萨克

然后保留您现在拥有的 crontab 条目,但添加参数:

0 14 * * * /路径/到/你的/脚本日常的
59 23 * * 0 /路径/到/你的/脚本每周
59 23     (最后的)   * * /路径/到/你的/脚本半年一次

嗯 — 您如何使用 cron 在该月的最后一天运行作业?

警告:我没有测试过以上内容。

笔记:

  • 没有理由这样做else   :
  • 没有理由使用 anif来测试始终为真的条件来处理您每次想要执行的代码。
  • exec是 Unix 系统函数和 shell 命令的名称。使用它作为函数名称的一部分会令人困惑。

相关内容