vesperlight的个人博客分享 http://blog.sciencenet.cn/u/vesperlight

博文

基于crontab的进程守护方法

已有 3131 次阅读 2021-1-20 22:07 |个人分类:linux|系统分类:科研笔记

用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://blog.sciencenet.cn/blog-2379401-1268143.html

上一篇:Docker中的linux系统添加中文支持
下一篇:使用Aspera批量下载GeneBank和EMBL数据库数据
收藏 IP: 125.69.92.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-5 07:59

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部