일부 파일을 가져와 설치 파일 중 하나를 처리하는 사이트에 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