2016-11-03 2 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 다음 사용자 account2에 대한 광고 작성 백업

답변

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에서 이맥스를 시작하고 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

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 트릭이 필요없는 스크립트가 있다면 루프는 표준 입력에서 읽습니다. 일반적으로, '읽는 동안; do ... done

관련 문제