shell 脚本的内容是这样的:
date
cur_date=`date '+%Y-%m-%d'`
cur_time=`date '+%Y-%m-%d %H %M %S'`
start_date='2014-01-01'
end_date=`date '+%Y-%m-%d'`
FiveDaysBack=`date --date='-7 day' "+%Y-%m-%d"`
rm -f *.sql
mysqldump -h192.168.200.150 torr > torr1.sql &
mysqldump -h192.168.200.100 torr > torr2.sql &
...
...
...
wait && echo `date` complete.
我运行此脚本为:
Nohup SH etl.sh &
执行脚本会导致所有sql转储进入nohup.out文件,而不是torr1.sql,torr2.sql等。所以我得到了一个巨大的nohup.out文件,我希望转储进入torr.sql文件。
请注意,此脚本的功能远不止于此,我并不是在寻找获取 mysql 转储的替代安排。我想知道的是为什么 mysqldump 输出没有进入指定的文件,而是被定向到 nohup.out。我想解决这个问题。
重新回答:
我会使用"屏幕"而不是"nohup"。这是一个更强大的解决方案,允许您在活动终端关闭时重新访问它。请参阅此处或此处进行讨论。
最后一行应该有两个 & 字符: wait && echo $(date) complete.
这仍然不能回答您的问题。也许mysqldump写信给stderr,或者你的 etl.sh 对stdout做了一些有趣的事情。
我用这个脚本重现了你的问题:
sleep 10
rm non_existing > stdout.txt
我开始这个脚本(我把它保存为 rm_nothing.sh)
nohup rm_nothing.sh
rm 的输出没有出现在 stdout.txt 中。
请尝试添加 2>&1
mysqldump -h192.168.200.150 torr > torr1.sql 2>&1 &
好吧,这听起来很愚蠢。
1.抱歉没有粘贴整个命令,沃尔特和菲尔舍姆。也许它会有所帮助。
2. 整个命令是:
mysqldump --insert-ignore --skip-add-drop-table --no-create-info --lock-tables=false -ucrbt_se -pcrbt_se -h10.2.2.150 blah master_backup --where "date(END_TIME)>='$FiveDays'" --result-file=torr1.sql
而纳诺正在把文字包裹起来。由于转储很大,我从未等过看到MySQL最终抛出的错误,该错误指示命令的参数错误。
浪费了2天。该死的。