我有一个 bash 脚本,它需要一些文件并将它们设置为 FTP 到处理其中一个设置文件的站点。我们正在寻找让其他文件在本月的第一个星期一上架的方法,但我不确定如何将其放入 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 语句的正确方向。有什么想法可以解决这个问题吗?
添加注意:此脚本必须在每月的每个工作日运行才能上传要处理的文件。
我没有时间阅读所有脚本,但想法如下:使用
date
命令获取星期几的名称:(
LC_TIME=C
用于获取星期几的英文名称)然后得到一个月中的一天
然后检查日期是否小于 8 并且星期几是星期一:
将有问题的脚本放入您的
crontab
:在每个星期一的 0100 时,它会检查日期是否小于或等于 7,如果是,则运行脚本。
使用它的好处是很容易重新安排星期二的时间,而无需编辑脚本。
您可以让 cron 在每个星期一运行一个脚本,并让该脚本检查该月的日期是否为 1 到 7。
此检查可以集成到您的主脚本中,也可以编写一个包装器脚本,这样您就不必对主脚本进行此更改以便它可以运行。
检查星期几和月份的星期几: