2011-12-12 39 views
0

完成---文件makebackup.sh等待shell腳本纔去下一行通過計劃

#!/bin/bash 
mysqldump --all-databases | gzip -9 > /backup/temp_db.gz 
tar -Pcf /backup/temp_ftp.tar /public_html/ 
tar -Pcf /backup/temp_backup.tar /home/temp_db.gz /backup/temp_ftp.tar 
wait %% 
/backup/upload.sh 

---文件upload.sh

#!/usr/bin/expect -f 

# connect via scp 
spawn scp /backup/temp_backup.tar [email protected]:/home/backup.tar 
####################### 
expect { 
-re ".*es.*o.*" { 
exp_send "yes\r" 
exp_continue 
} 
-re ".*sword.*" { 
exp_send "mypassword\r" 
} 
} 
interact 

我看到所有文件都在那裏。在適當的大小 當我看到目標網站時,我看到的文件比源文件夾中的源服務器的文件少18倍。

當我只是運行它作爲./makebackup.sh它運作正常時,我運行槽cron它沒有。有沒有辦法執行backup/upload.sh只有先前的命令完成後?

15 12 * * 1,3,5 /backup/makebackup.sh 2>&1 >> /var/log/cron_makebackup.log 

當我手動運行它時,Cron日誌不會說任何其他內容。

回答

1

我不知道是什麼wait %%做,但這應該幫助:

#!/bin/bash 
mysqldump --all-databases | gzip -9 > /backup/temp_db.gz 
tar -Pcf /backup/temp_ftp.tar /public_html/ 
tar -Pcf /backup/temp_backup.tar /home/temp_db.gz /backup/temp_ftp.tar && \ 
/backup/upload.sh || \ 
/backup/upload.sh 

注意:永遠不會忘記你可以設置scp(和ssh太)to work without passwords!我會考慮,而不是expect(這是一個偉大的工具)。

這種方式upload.sh只有在最後一個tar命令成功完成或者有錯誤退出代碼後纔會執行。

一些更多的信息:

  • 如果你寫test && command,在command將只如果測試成功執行。
  • 如果您編寫test || command,則command只有在測試失敗時纔會執行。

運行這些測試:

$ true && echo "Yes." 
Yes. 
$ false || echo "Yes." 
Yes. 

注意,結果是完全符合有關這種邏輯比較一個人的直覺一致,一切都很好,只要你不認爲有關的事實,真正的等於0 :) 下面是shell腳本編程和互動環節常見的另一種方案:

$ command1 && command2 && command3 && command4 

這行代碼不會,除非序列中運行的下一個命令先前的命令已經返回「真」,意味着沒有錯誤。如果沒有必要的預先結果,這是一種避免運行命令的方法。

另請參閱this article&&||的測試。

HTH

+0

wait %%據說等待上次觸發PID完成。你能告訴我這個&& \,|| \技術叫所以我可以找到更多的信息呢? – JohnA

+0

這沒有奏效。 – JohnA

+0

你的意思是沒有工作? –