매월 첫 번째 월요일인지 테스트하는 Bash 스크립트

매월 첫 번째 월요일인지 테스트하는 Bash 스크립트

일부 파일을 가져와 설치 파일 중 하나를 처리하는 사이트에 FTP로 설정하는 bash 스크립트가 있습니다. 우리는 매월 첫 번째 월요일에 다른 파일을 게시할 수 있는 방법을 찾고 있지만 해당 파일을 bash 스크립트에 넣는 방법을 모르겠습니다. crontab 사용에 대한 내용을 본 적이 있지만 스크립트의 첫 번째 부분과 마지막 부분은 정확히 동일하므로 2개의 다른 스크립트가 있는 경우 문제가 발생할 수 있습니다.

변경을 고려 중인 스크립트 부분만 넣으세요.

#!/bin/bash
...

e_file="/tmp/tmpemail.$(date +%s).txt"
file1='/usr/local/filename1'
file2='/usr/local/filename2'
relayserver='relay-server.example.com'

#ftp info
FTP_USER='ftpuser' #not the actual FTP User Name
FTP_DEST_PATH='/'

...

echo -e "Starting Tunnel and SFTP Process"
# make ssh tunnel for access to SFTP Site
ssh -L 9022:ftp.example.com:22 serviceaccount@$relay_server -Nf >/dev/null 2&>1
proc=`ps -ef | grep "ssh -L 9022\:ftp.example.com\:22" | awk '{print $2}'`

#checks to see if the tunnel opened correctly then proceeds to push to FTP Site
if [ "${proc}" != "" ]; then

    #looking for first monday, was thinking of first day but the crontab only runs on monday to friday
    ifStart=`date '+%d'`
    if [ $ifStart == 01 ]; then 

        echo -e "File 1 & File2 sent to FTP Site" >> $e_file
            $SFTP_CMD -oPort=9022 -b /dev/stdin $FTP_USER@localhost << END
        cd $FTP_DEST_PATH
        put $file1
        put $file2
        bye
END

    else

        echo -e "file 2 sent to FTP" >> $e_file
            $SFTP_CMD -oPort=9022 -b /dev/stdin $FTP_USER@localhost << END
        cd $FTP_DEST_PATH
        put $file2
        bye
END

    fi

    echo "killing ssh tunnel - $proc"
    kill $proc

else

...

댓글을 게시해야 하는 달의 첫 번째 월요일에 if 문을 얻을 수 있는 올바른 방향을 얻기를 바라고 있습니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

추가된 참고 사항: 처리할 파일을 업로드하려면 이 스크립트를 매월 영업일에 실행해야 합니다.

답변1

모든 스크립트를 읽을 시간은 없지만 아이디어는 다음과 같습니다. date다음 명령을 사용하여 요일 이름을 가져옵니다.

we=$(LC_TIME=C date +%A)

( LC_TIME=C요일의 영어 이름을 구하는데 사용됨)

그런 다음 해당 월의 날짜를 얻으십시오.

dm=$(date +%d)

그런 다음 날짜가 8보다 작고 요일이 월요일인지 확인합니다.

if [ "$we" = "Monday" ] && [ "$dm" -lt 8 ]
then 
.....
fi

답변2

문제의 스크립트를 다음 위치에 넣으세요 crontab.

0 1 * * 1 [[ "$(/bin/date +\%d)" -le 7 ]] && /path/to/script.sh

매주 월요일 0100시에 날짜가 7일보다 작거나 같은지 확인하고 그렇다면 스크립트를 실행합니다.

이 기능을 사용하면 스크립트를 편집하지 않고도 화요일 일정을 쉽게 변경할 수 있다는 이점이 있습니다.

답변3

cron이 매주 월요일에 스크립트를 실행하고 해당 월의 날짜가 1에서 7인지 확인하도록 할 수 있습니다.

이 검사는 기본 스크립트에 통합될 수 있으며, 실행하기 위해 기본 스크립트를 변경할 필요가 없도록 래퍼 스크립트를 작성할 수도 있습니다.

if [[ $(date +%d) =~ 0[1-7] ]]; then
    : run script
fi

요일과 월을 확인하세요.

if [[ $(date +%w%d) =~ 10[1-7] ]]; then
    : run script
fi

관련 정보