---文件makebackup.sh
#!/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
--- file upload.sh
#!/usr/bin/expect -f
# connect via scp
spawn scp /backup/temp_backup.tar root@mybackup.com:/home/backup.tar
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "mypassword\r"
}
}
interact
当我查看/backup
文件夹时,我看到所有文件都在那里。尺寸合适
当我查看目标站点时,我看到的文件比我在/backup
文件夹中的源服务器中的文件少18倍。
当我将它作为./makebackup.sh
运行时,当我通过cron运行时它没有正常工作。一旦先前的命令完成,有没有办法执行backup/upload.sh
ONLY ?
15 12 * * 1,3,5 /backup/makebackup.sh 2>&1 >> /var/log/cron_makebackup.log
除非我手动运行,否则Cron日志在其他地方没有说什么。
答案 0 :(得分: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
(这是一个很棒的工具)。
这种方式只有在最后一个tar命令成功完成或错误退出代码完成后才会执行upload.sh
。
更多信息:
test && command
,则只有在测试成功时才会执行command
。test || command
,则只有在测试失败时才会执行command
。运行这些测试:
$ true && echo "Yes."
Yes.
$ false || echo "Yes."
Yes.
请注意,结果完全符合一个人对这种逻辑比较的直觉,只要你没有考虑到真等于0.的事实,一切都很好。:) 这是shell脚本编程和交互式会话中常见的另一种方案:
$ command1 && command2 && command3 && command4
除非先前的命令返回“true”,否则这行代码不会运行序列中的下一个命令,这意味着没有错误。如果不存在所需的先前结果,这是避免运行命令的一种方法。
另请参阅&&
上的this article和||
测试。
HTH