私たちは毎晩バックアップされるデータベースを持っています。バックアップファイルは、6つの別々のディレクトリにある6つの別々のファイルです。バックアップが成功すると、すべての部分がリモートサーバーに移動されます。 lftpコマンドは、出力をftpfiles.shというファイルにリダイレクトし、実行するbashスクリプトによって生成されます。 ftpfiles.shの内容は次のとおりです。
lftp -u user,pass 1.1.1.1 <<end_script
mkdir BackUp
cd BackUp
lcd /data10/customerBackup
put CUSTOMER.0.DBPART000.20220705010003.001
lcd /data1/customerBackup
put CUSTOMER.0.DBPART000.20220705010003.002
lcd /data2/customerBackup
put CUSTOMER.0.DBPART000.20220705010003.003
lcd /data7/customerBackup
put CUSTOMER.0.DBPART000.20220705010003.006
lcd /data8/customerBackup
put CUSTOMER.0.DBPART000.20220705010003.005
lcd /data9/customerBackup
put CUSTOMER.0.DBPART000.20220705010003.004
quit
end_script
exit 0
各ファイルのサイズが大きく、このプロセスを完了するのに約7時間かかりました。それで、これらのファイルを並列に送信したいと思います。mirror
ファイルを並列に送信できるlftpオプションを使用するには、インクルードと除外をたくさん追加する必要があります。これは危険です。別のオプションは、put
各プロセスをバックグラウンドで送信することです。以下はコマンドラインのステップです(bashスクリプトを使用しません)。
[root@autodb /]# lftp -u user,pass 1.1.1.1
lftp [email protected].:~> mkdir BackUp
lftp [email protected].:~> cd BackUp
lftp [email protected].:~> lcd /data10/customerBackup
lftp [email protected].:~> put CUSTOMER.0.DBPART000.20220705010003.001
'CUSTOMER.0.DBPART000.20220705010003.001' at 40555088 (1%) [Sending data] {I PRESSED CTRL+Z IN HERE}
[0] put CUSTOMER.0.DBPART000.20220705010003.001 &
CUSTOMER.0.DBPART000.20220705010003.001 (8%) 45.85M/s eta:74s [Sending data]
lftp [email protected].:~> quit
[111] Moving to background to complete transfers...
[root@autodb /]#
私はこれをbashスクリプトとして実装しようとしましたが、成功しませんでした。たとえば、bashスクリプトに入れます。
(put CUSTOMER.0.DBPART000.20220705010003.001) &
put CUSTOMER.0.DBPART000.20220705010003.001 &
それでは、bashスクリプトでctrl + zを使用してlftpプロセスをバックグラウンドで送信できますか?
これは lftp コマンドを生成するスクリプトでもあります。
FTPFILES1='/data1/cronJobs/ftpfiles.sh'
DBNAME=CUSTOMER
##ftp files
cd /data1/cronJobs/
cat /dev/null > ftpfiles.sh
echo "lftp -u $FTPUSER,$FTPPASSWD $FTPSRV <<end_script
mkdir BackUp
cd Backup " >> $FTPFILES1
BACKUP_FILE_ARRAY=( /data*/"${DBNAME,,}"Backup/"$DBNAME.0.DBPART000".$(date +%Y%m%d)* )
for BACKUP_FILE in "${BACKUP_FILE_ARRAY[@]}"
do
echo "lcd $(dirname $BACKUP_FILE)" >> $FTPFILES1
echo "put $(basename $BACKUP_FILE)" >> $FTPFILES1
done
echo "quit
end_script
exit 0 " >> $FTPFILES1
答え1
カーニバルについてどんな誤解がありますか? lftpコマンドを実行すると、bashではなくlftp環境にあり、CTRL + Zはありません。あなたの場合は、6つの別々のスクリプトを書くことをお勧めします。ファイルごとに1つです。次に、lftpのみを呼び出すBASHスクリプトを作成します。その後、&を使用することもできます。たとえば、
lftp -u user,pass 1.1.1.1 << script1 &
lftp -u user,pass 1.1.1.1 << script2 &
...