我编写了一个备份脚本,按此顺序执行以下操作:
现在,当我从RHEL的命令行运行此脚本时,它可以正常工作。
但是当我将此脚本设置为通过cronjob运行时,脚本会运行,但从我所知道的,它以某种方式同时运行上述3个命令。因此,事情正在按顺序完成(我的本地数据库在#1 zip工作实际完成之前已完成转储和转移)。
有没有人遇到这种奇怪的情况?作为最简单的修复,有没有办法强制脚本同步运行?也许在继续之前添加某种命令来等待前一行完成?
编辑我添加了备份脚本的示例版本。似乎我的脚本的第二行与我的脚本的第一行同时运行,所以当发出SSH命令时,它在我的第二行触发并开始SQL转储之前尚未完成。
#!/bin/bash
THEDIR="sample"
THEDBNAME="mydatabase"
ssh -i /rsync/mirror-rsync-key sample@sample.com "tar zcvpf /$THEDIR/old-1.tar /$THEDIR/public_html/*"
mysqldump --opt -Q $THEDBNAME > mySampleDb
/usr/bin/rsync -avz --delete --exclude=**/stats --exclude=**/error -e "ssh -i /rsync/mirror-rsync-key" /$THEDIR/public_html/ sample@sample.com:/$THEDIR/public_html/
/usr/bin/rsync -avz --delete --exclude=**/stats --exclude=**/error -e "ssh -i /rsync/mirror-rsync-key" /$THEDIR/ sample@sample.com:/$THEDIR/
答案 0 :(得分:1)
除非您明确使用背景(&),否则所有内容都应该逐个运行,等到之前完成。 也许你实际上看到cron重复先前的执行?如果是这样,您可以通过使用flock调用脚本来阻止多次执行
e.g。来自
的午夜cron入场券0 0 * * * backup.sh
到
0 0 * * * flock -n /tmp/backup.lock -c backup.sh
答案 1 :(得分:0)
如果您想按顺序运行命令,可以使用; 运算符。
- 分号运算符
此运算符一次运行多个命令,但按顺序运行。如果我们用分号分隔三个命令,第二个命令将在第一个命令完成后运行,第三个命令将在第二个命令执行完成后运行。我们应该知道的一点是,要运行第二个命令,它不依赖于第一个命令退出状态。
依次在一行中执行ls,pwd,whoami命令。
ls;pwd;whoami
如果我没有正确理解你的问题,请纠正我。