||
用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,长这个样子:
下面星号和数字部分表示的是启动时间,对应下面这个表。
我每分钟检测一次就好了,所以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
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-5 07:59
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社