여러 보고서를 생성하는 방법은 무엇입니까? 지금은 일일 보고서만 받습니다.

여러 보고서를 생성하는 방법은 무엇입니까? 지금은 일일 보고서만 받습니다.
#!/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

뭔가 빠졌을 수도 있지만 스크립트가 실행될 때마다 세 가지 보고서를 모두 생성하기를 원하는 것 같습니다(이 테스트 버전). 그러나 한 번의 호출로 여러 보고서를 생성하도록 스크립트가 설정되어 있지 않습니다. 스크립트를 실행할 때 발생하는 일반적인 흐름은 다음과 같습니다.

만약에(조건은 항상 참)
그 다음에
    returnNumDays="180"
    디렉토리 = "$반년"
기타
    :
필리핀 제도

만약에(조건은 항상 참)
그 다음에
    반환 일수 = "7"
    디렉토리="매주$"
기타
    :
필리핀 제도

만약에(조건은 항상 참)
그 다음에
    반환 일수 = "1"
    디렉토리="$daily"
필리핀 제도


(일일 보고서 생성)

당신은 다음과 같은 일을해야합니다

(정의 실행파일 보고 기능)

만약에(이달의 마지막 날이에요)
그 다음에
    returnNumDays="180"
    디렉토리 = "$반년"
    실행파일 보고
필리핀 제도

만약에(오늘은 일요일이에요)
그 다음에
    반환 일수 = "7"
    디렉토리="매주$"
    실행파일 보고
필리핀 제도

반환 일수 = "1"
디렉토리="$daily"
실행파일 보고

이 스크립트할 수 있는한 번의 통화로 세 가지 보고서를 모두 생성합니다. 예를 들어 2월 10일, 2월 17일, 2월 24일, 3월 3일, 3월 10일, 3월 17일, 3월 24일(매주 일요일)에 월별, 일일 보고서가 작성됩니다. 반기보고서와 일일보고서는 2월 28일에 작성될 예정이다. 3월 31일 일요일에는 세 가지가 모두 달성됩니다. 따라서 매일 스크립트를 실행하면 됩니다. 세 개의 cron 라인이 필요하지 않습니다.

이제 위의 여러 보고 날짜 중 일일 보고서는 오후 2시에 생성되고 다른 보고서는 오후 11시 59분에 생성되기를 원한다고 가정합니다. 이러한 세부 사항은 제가 설명을 요청할 때 질문에 포함되었어야 했습니다. 이 문제를 해결하려면 스크립트를 더 똑똑하게 또는 덜 똑똑하게 만들어야 합니다. 덜 영리하게 만드는 것이 좋습니다. 대신 바꿔봐알아내다어떤 보고서를 생성하고 싶지만 매개변수를 사용하여 어떤 보고서를 생성할지 알려줍니다. 이 같은:

(정의 실행파일 보고 기능)

케이스 '$1'
     (6개월에 한번)
        returnNumDays="180"
        디렉토리 = "$반년"
        실행파일 보고
        ;;

     (주간)
        반환 일수 = "7"
        디렉토리="매주$"
        실행파일 보고
        ;;

    (일일)
        반환 일수 = "1"
        디렉토리="$daily"
        실행파일 보고
        ;;
이삭

그런 다음 현재 가지고 있는 crontab 항목을 유지하고 매개변수를 추가하십시오.

0 14 * * * /경로/to/your/script일일
59 23 * * 0 /경로/to/your/script주간
59 23     (마지막)   * * /경로/to/your/script6개월에 한 번씩

흠 - 매월 말일에 작업을 실행하기 위해 cron을 어떻게 사용합니까?

경고: 위 사항을 테스트하지 않았습니다.

노트:

  • 이렇게 할 이유가 없습니다 else   :.
  • if매번 실행하려는 코드에 대해 항상 true인 조건을 테스트하기 위해 an을 사용할 이유가 없습니다 .
  • execUnix 시스템 함수 및 셸 명령의 이름입니다. 이를 함수 이름의 일부로 사용하면 혼란스러울 수 있습니다.

관련 정보