如何在特定时间后运行后使脚本自行终止?

时间:2015-09-21 20:41:10

标签: bash shell ubuntu kill kill-process

我有这个脚本:

#!/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秒后)?

2 个答案:

答案 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