bashスクリプトでctrl + zを使用してlftpプロセスをバックグラウンドで送信できますか?

bashスクリプトでctrl + zを使用してlftpプロセスをバックグラウンドで送信できますか?

私たちは毎晩バックアップされるデータベースを持っています。バックアップファイルは、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 &
...

関連情報