2016-11-03 19 views
1

rsyncバックアップ用の別のスクリプトを使用するスクリプトの場合は、「Time Machine」と入力します。形式終了bashスクリプト

しかし、フィニッシュ最初のユーザプログラムは

backup.sh

#!/bin/bash                                                                      
while read A; do 
    echo $A 
    ssh [email protected] "[[ -d /Volumes/MACBACKUP/desarrollo_backups/$A ]] || mkdir /Volumes/MACBACKUP/desarrollo_backups/$A; touch /Volumes/MACBACKUP/desarrollo_backups/$A/backup.marker" 
    bash /home/vagrant/rsync_tmbackup.sh $A/ [email protected]:/Volumes/MACBACKUP/desarrollo_backups/$A/ 
done < cuentas.txt 

ファイルbackup.sh実行

account1 
account2 
.. 
accountN 

cuentas.txt

account1 # comment first iteration on while 
rsync_tmbackup: Previous backup found - doing incremental backup from [email protected]:/Volumes/MACBACKUP/desarrollo_backups/account1/2016-11-03-075246 
rsync_tmbackup: Creating destination [email protected]:/Volumes/MACBACKUP/desarrollo_backups/account1/2016-11-03-080415 
rsync_tmbackup: Starting backup... 
rsync_tmbackup: From: castris 
rsync_tmbackup: To: [email protected]:/Volumes/MACBACKUP/desarrollo_backups/account1/2016-11-03-080415 
rsync_tmbackup: Running command: 
rsync_tmbackup: rsync -e 'ssh -p 22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' -D --compress --numeric-ids --links --hard-links --one-file-system --itemize-changes --times --recursive --perms --owner --group --log-file '/home/vagrant/.rsync_tmbackup/2016-11-03-080416.log' --link-dest='/Volumes/MACBACKUP/desarrollo_backups/account1/2016-11-03-075246' -- 'castris/' '[email protected]:/Volumes/MACBACKUP/desarrollo_backups/account1/2016-11-03-080415/' | grep -E '^deleting|[^/]$' 
Warning: Permanently added '192.168.1.33' (ECDSA) to the list of known hosts. 
rsync_tmbackup: Backup completed without errors. # Here finish first iteration on while, and muts be with second iteration, but bash end while 

を停止し、停止したとき、inste次のユーザーアカウントの広告作成バックアップ2

答えて

1

以下のように「ssh -n」を使用できますか。

#!/bin/bash                                                                      
while read A; do 
echo $A 
ssh -n [email protected] "[[ -d /Volumes/MACBACKUP/desarrollo_backups/$A ]] || mkdir /Volumes/MACBACKUP/desarrollo_backups/$A; touch /Volumes/MACBACKUP/desarrollo_backups/$A/backup.marker" 
bash /home/vagrant/rsync_tmbackup.sh $A/ [email protected]:/Volumes/MACBACKUP/desarrollo_backups/$A/ 
done < cuentas.txt 

男のssh。

-n stdinを/ dev/nullからリダイレクトします(実際にはstdinの読み込みを防止します)。これは、sshがバックグラウンドで実行されている場合に使用する必要があります。 A これは、リモートマシン上でX11プログラムを実行するために使用します。 たとえば、ssh -n shadows.cs.hut.fi emacs &はshadows.cs.hut.fiでemacsを開始し、X11接続は自動的に暗号化されたチャネルを介して に転送されます。 sshプログラムは、背景を に入れます。 (sshがパスワードやパスフレーズを求める必要がある場合、これは を動作しません。また、-fオプションを参照してください。)

+0

ssh -n解決しません。問題は "ssh"コマンドを実行した後ではなく、 "bash"プログラムrsync_tmbackup.shを実行した後である。ありがとう。 – abkrim

+0

@abkrimでは、rsync_tmbackup.shでもsshコマンドを使用します。スクリプト内でこれを変更することもできますか? rsync -e 'ssh -n -p ... –

+0

なぜですか?私はsshコマンドを実行するのが好きではありません。私の質問はそれ以外です。しばらくの間、最初の反復を実行した後、失敗するbashスクリプトに関する質問です。 sshそれはプログラムの行です。 bash ...それはbashスクリプトの他の行です。 @ abkrim; – abkrim

0

私は@MustafaDOGRUは、基本的な問題についての権利であるかなり確信している:ループが開始すると、 readはcuentas.txtの最初の行を(期待どおり)読み込みますが、ループの途中の部分がファイルの残りの部分を読み込んで、スクリプトがread次の行にしようとすると、何も残っていないので、それは完了し、終了します。 Mustafaのアプローチは、ループの途中のどの部分を読んで停止させるかを試みることでしたが、複数のことがあるように見え、それらを追跡することは面倒かもしれません。しかし、別の方法があります:標準入力以外の何かを介してファイルの内容を渡す:

#!/bin/bash                                                                      
while read -u3 A; do 
    echo $A 
    ssh [email protected] "[[ -d /Volumes/MACBACKUP/desarrollo_backups/$A ]] || mkdir /Volumes/MACBACKUP/desarrollo_backups/$A; touch /Volumes/MACBACKUP/desarrollo_backups/$A/backup.marker" 
    bash /home/vagrant/rsync_tmbackup.sh $A/ [email protected]:/Volumes/MACBACKUP/desarrollo_backups/$A/ 
done 3< cuentas.txt 

3< cuentas.txtがディスクリプタ#3ではなく、標準入力ファイルにcuentas.txt向ける(あるFD#0)、およびread -u3 fd#3から読み込むので、それらは一緒に正しく動作するはずです。 fd#3は通常は使用されていないので、ループの途中にある何かがそれを混乱させる可能性はかなり低いです。

+0

すべての路線。私は別のスクリプトを書いた。このスクリプトは同じプロセスですが、bash /home/vagrant/rsync_tmbackup.shは実行しません。結果?もちろん、問題なくすべての繰り返しを実行してください。私は、複数のプロセスをリモートマシンで実行するために、ループを持つスクリプトをたくさん持っています。これはこの問題で初めてです。 http://paste.tamainut。info/view/e6766181このコードは、リモートコマンドを実行し、リモートディレクトリを作成したあとにします。 – abkrim

+0

@abkrim私はあなたを正しく理解しているかどうかはわかりませんが、fd 3トリックを使わずにスクリプトを実行すると、ループは標準入力から読み取ります。一般に、「読んでいる間はA; do ... done

関連する問題