如何让脚本在特定时间后 运行 后自行终止?
How to make a script kill itself after running after a specific time?
我有这个脚本:
#!/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 秒后)?
只是运行 hive
在后台,然后进入睡眠5秒,当sleep
退出时杀死hive
。如果 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
此脚本将在 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 循环,因为它可以很容易地证明这个概念是有效的。替换为您的配置单元命令会导致:
#!/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)
我有这个脚本:
#!/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 秒后)?
只是运行 hive
在后台,然后进入睡眠5秒,当sleep
退出时杀死hive
。如果 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
此脚本将在 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 循环,因为它可以很容易地证明这个概念是有效的。替换为您的配置单元命令会导致:
#!/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)