Eu tenho um script bash que pega um punhado de arquivos e os configura para FTP em um site que processa um dos arquivos de configuração. Estamos procurando uma maneira de fazer com que o outro arquivo seja ativado na primeira segunda-feira do mês, mas não tenho certeza de como colocar isso no script bash. Já vi coisas sobre o uso do crontab, mas a primeira parte e a última parte do script seriam exatamente as mesmas e poderiam causar problemas se tivéssemos 2 scripts diferentes.
apenas colocando uma parte do script que pretendo fazer a alteração.
#!/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
...
Estou procurando ser apontado na direção certa para obter a declaração if para a primeira segunda-feira do mês em que devo comentar. Alguma ideia para contornar isso?
Nota adicionada: Este Script deve ser executado todos os dias da semana do mês para carregar os arquivos a serem processados.
Não tenho tempo para ler todo o script, mas aqui está a ideia: with
date
command get the name of the day in week:(
LC_TIME=C
é usado para obter o nome em inglês do dia da semana)e, em seguida, obter dia no mês
e verifique se o dia é menor que 8 e o dia da semana é segunda-feira:
Coloque o script em questão no seu
crontab
:Todas as segundas-feiras às 01h00, ele verificará se a data é menor ou igual ao sétimo e, em caso afirmativo, executará o script.
O bônus de usar isso é que é muito fácil reagendar para as terças-feiras sem precisar editar o script.
Você pode fazer com que o cron execute um script toda segunda-feira e fazer com que o script verifique se o dia do mês é de 1 a 7.
Essa verificação pode ser integrada em seu script principal ou você pode escrever um script wrapper para que não precise fazer essa alteração no script principal para que ele possa ser executado.
Verificando o dia da semana e o dia do mês: