Linux之for循环进程终止的方法
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
需求是这样:
#!/usr/bin/bash
day=0
tmpday=0
tmp2=0
#for循环执行进程,省的一个个手动跑
for((day=1;day<=59;day++))
do
if [[ $day -lt 10 ]]; then
tmpday=2018010${day}
elif [[ $day -le 31 ]]; then
tmpday=201801${day}
elif [[ $day -lt 41 ]]; then
tmp2=`expr $day - 31`
tmpday=2018020${tmp2}
else
tmp2=`expr $day - 31`
tmpday=201802${tmp2}
fi
echo ${tmpday};
/usr/local/hadoop/bin/hadoop jar /home/workspace/xm-bin.jar com.xm.hadoop.Main \
-Drp.input.data1=/input/data1/${tmpday}-data1.txt \
-Drp.input.data2=/input/data2/ \
-Drp.output.path=/output/marathon/${tmpday}
done
以上是一个shell脚本的内容,名为123.sh,这个脚本的目的是使用 Hadoop根据两个输入文件计算出一个结果,由于希望跑59天,所以按照原来的想法是把这个脚本跑59遍,每跑完一次改一下参数,后来了解到可以使用shell中的for循环,然后在for循环外面建立变量,此乃背景
问题是什么呢
如果我跑完了一天发现原来写的hadoop分析文件(也就是xm-bin.jar)有问题,需要重跑,这个时候怎么办呢,最简单粗暴的方法就是使用如下命令
hadoop job -kill job_123456789434_1234
但是如果for循环很多的话,比如100次,按照这个方法得执行100次这个命令,头大
后来想到linux中杀进程的方法都是kill + 进程id
现在问题就转变成如何获取正在运行的123.sh脚本的进程id
ps -aux
进程太多,根本找不到
ps -aux|grep 123.sh 或者 ps -ef|grep 123.sh
后者可以查到父进程的id,不过执行kill 父进程id根本无效
即使加上信号也没用,就是下面这样
kill -s 9 进程id
皇天不负苦心人,终于找到了答案,参考如何查找SHELL的进程号,并杀死
具体步骤就是:
1、在123.sh中第一行添加如下代码
echo "$$" > /tmp/xm_process.pid
这样,该脚本的id就会被写到/tmp/xm_process.pid这个文件中去
2、查看该进程id,并终止进程
[root@namenode xm]# cat /tmp/xm_process.pid
23452
[root@namenode xm]# kill 26398
3、123.sh脚本虽然被kill了,但是已经在执行的hadoop作业却依然在跑,如果该作业有很多job,那么它就会跑完所有job才会停止,所以需要kill掉正在跑的job,这样才会完全终止
hadoop job -kill job_123456789434_1234
GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献1条内容
所有评论(0)