いくつかのファイルをインポートし、インストールファイルの1つを処理するサイトに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