涂波
基于crontab的进程守护方法
2021-1-20 22:07
阅读:2520

用aspera批量下载几个T的基因组数据的时候,由于网络问题经常会使得apsera超时中止。如果不超时时间设置太长又怕无限期卡死了,这两种情况如果没有及时发现事情又要耽误很久。好在aspera支持断点续传,所以在只需要实时监测aspera的运行情况,如果进程停了就重新开始。我的思路是写一个shell脚本用ps命令检测apsera的任务ascp是否在运行,如果没在进行就重新执行,如果在运行就跳过。用crontab每隔一定的时间就运行这个脚本。


1、监测进程

ps -C "ascp" --no-header | wc -l


ps查看进程,-C只打印进程ID, --no-header结果不打印表头。这一部分就是查看ascp这个名字的进程是否存在。然后管道符号传递给wc -l 统计有几行,如果在运行则行数大于0。

因此,可以写一个shell脚本


# !/bin/bash

#检测进程是否在运行,并将进程的行数信息传给count变量。

count=$(ps -C "ascp" --no-header | wc -l)

#如果count值大于0,则表示进程不存在

if [ $count -eq 0 ]

then

#进程不存在则运行下面的命令,尾部加上&使其在后台运行

~/.aspera/connect/bin/ascp -QT -k 1 -l 1000m -P 33001 -i ~/.aspera/connect/etc/asperaweb_id_dsa.openssh  --user era-fasp --mode recv --host fasp.sra.ebi.ac.uk --file-list ~/list.txt  ~/data &

fi


将上面的代码保存为protect.sh脚本,放在随便什么地方。


2、使用crontab定期检查

crontab是linux用来定期执行程序的命令。可以编辑位于/etc/crontab文件,实现脚本或命令的定期执行。cat /etc/crontab,长这个样子:

image.png


下面星号和数字部分表示的是启动时间,对应下面这个表。


image.png


我每分钟检测一次就好了,所以sudo vim /etc/crontab打开文件,在最后添加一行:


* * * * * yourusername sh ~/home/protect.sh

esc -> : -> wq回车保存退出。

过一两分钟crontab就生效了,用top命令可以考到ascp已经在运行了。用kill命令杀死这个进程测试下是否能在此启动,发现过了一会进程又重新出现了。


当然除了这一种方法外还有一些别的方法能同样实现这一过程,对于一个临时的小工作而言这个方法就比较方便了。


参考资料:

https://www.runoob.com/linux/linux-comm-ps.html

https://www.runoob.com/linux/linux-comm-crontab.html


转载本文请联系原作者获取授权,同时请注明本文来自涂波科学网博客。

链接地址:https://wap.sciencenet.cn/blog-2379401-1268143.html?mobile=1

收藏

分享到:

当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?