我有这个脚本:
#!/bin/sh
echo "Start: " $(date +%s)
(time hive --hiveconf mapreduce.job.reduce.slowstart.completedmaps=0.5 --hiveconf mapred.reduce.tasks=10 --hiveconf mapreduce.reduce.shuffle.parallelcopies=15 --hiveconf hive.execution.engine=mr -f sample-queries-tpcds/query50.sql --database tpcds_text_db_1_10) 2> output/tpcds_query_2c_50_mr.out
echo "End: " $(date +%s)
如何在其中添加一些代码,以便在执行5秒后自杀? (比如./script.sh 5秒后)?
答案 0 :(得分:3)
此脚本将在5秒后自行终止:
#!/bin/sh
echo "Start: " $(date +%s)
sleep 5s && kill $$ &
while sleep 1; do echo Working; done
echo "End: " $(date +%s)
管道sleep 5s && kill $$
在后台运行,并在5秒后发出一次杀戮。
您的命令(可能是hive
)在前台运行。在上面的例子中,我使用了while循环,因为它可以轻松演示该概念的工作原理。在您的hive命令中替换会导致:
#!/bin/sh
echo "Start: " $(date +%s)
sleep 5s && kill $$ &
(time hive --hiveconf mapreduce.job.reduce.slowstart.completedmaps=0.5 --hiveconf mapred.reduce.tasks=10 --hiveconf mapreduce.reduce.shuffle.parallelcopies=15 --hiveconf hive.execution.engine=mr -f sample-queries-tpcds/query50.sql --database tpcds_text_db_1_10) 2> output/tpcds_query_2c_50_mr.out
echo "End: " $(date +%s)
答案 1 :(得分:1)
只需在后台运行hive
,然后进入睡眠状态5秒钟,并在hive
退出时终止sleep
。如果hive
已完成,kill
将打印错误消息,但您可以将其重定向到/dev/null
以忽略它。
hive --hiveconf mapreduce.job.reduce.slowstart.completedmaps=0.5 \
--hiveconf mapred.reduce.tasks=10 \
--hiveconf mapreduce.reduce.shuffle.parallelcopies=15 \
--hiveconf hive.execution.engine=mr \
-f sample-queries-tpcds/query50.sql \
--database tpcds_text_db_1_10) \
2> output/tpcds_query_2c_50_mr.out & hive_pid=$!
sleep 5 & wait
kill $hive_pid 2> /dev/null