在数值天气预报应用中,经常需要下载一些输入资料,美国ncep的gfs资料是常用的一种分析场资料。业务运行,需要每天定时从ncep网站上下载,所以写了一个Shell脚本实现这一功能。脚本内容如下:

#!/bin/bash

export LANG=C

# date setting
if [ $# -eq 0 ];then
echo "+++++ Error hours, please check argument! +++++"
echo " Usage: $0 00/06/12/18"
exit 1
else
hh=$1
shift
fi if [ $hh -ne 00 -a $hh -ne 06 -a $hh -ne 12 -a $hh -ne 18 ];then
echo "+++++ Error hours, please check argument! +++++"
echo " Usage: $0 00/06/12/18"
exit 1
fi if [ $# -ne 0 ];then
rundate=$1
else
rundate=`date -u +%Y%m%d`
fi gdate=$rundate # download gfs files to tmp dir
tmppath=/dev/shm/gfs/${gdate}${hh}
rm -rf $tmppath && mkdir -p $tmppath
cd $tmppath
for i in `seq 0 6 72`
do
filepath=ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.${gdate}${hh}
filename=gfs.t${hh}z.pgrb2f`printf %02d $i`
# use axel as first chosen downloader, proz and wget as second and third
/usr/local/bin/axel -n 8 -v ${filepath}/${filename} >& log.${filename}
if ! grep "^Downloaded.*megabytes" log.${filename} ;then
echo "download with axel unsuccessfully! redownload with prozilla"
/usr/local/bin/proz -k=8 -r -f --no-curses --no-netrc --no-getch -v ${filepath}/${filename} >& log.${filename}
if ! grep "All Done" log.${filename} ;then
/usr/bin/wget ${filepath}/${filename} >& log.${filename}
fi
fi
done gfspath=/data/gfs/${gdate}${hh}
test -d $gfspath || mkdir -p $gfspath # move downloaded gfs files to final dir
cd $tmppath
for i in `seq 0 6 72`
do
filename=gfs.t${hh}z.pgrb2f`printf %02d $i`
cp $filename $gfspath && rm -f $filename
done echo
echo "GFS data files downloaded successfully!"
date

每天定时下载gfs资料shell脚本的更多相关文章

  1. FTP定时批量下载文件(SHELL脚本及使用方法 )

    1. 脚本实例 将以下脚本保存为 getftp.sh #!/bin/bash  datesign=`date -d -95day +%Y%m%d` ftp -nv 12.2.2.28 << ...

  2. FTP定时批量下载文件(SHELL脚本及使用方法 ) (转)--good

    #/bin/bash URL="http://192.168.5.100/xxx.php" check() { RESULT=$(curl -s $URL) echo $RESUL ...

  3. iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上-b

    用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法 ...

  4. shell脚本自学笔记

    一. 什么是Shell脚本 shell脚本并不能作为正式的编程语言,因为它是在linux的shell中运行的,所以称为shell脚本.事实上,shell脚本就是一些命令的集合. 假如完成某个需求需要一 ...

  5. Shell 脚本学习资料搜集

    Shell文档 ChinaUnix上大神“網中人”总结的Shell十三问,强烈推荐,这本书讲得比较精炼,而且都是一些Shell学习中容易把握不住的一些细节难点.每一问都写得非常精彩.ChinaUnix ...

  6. shell脚本实现文件的自动上传以及下载 scp sftp lftp 还有expect命令

    转至: 最近需求要求定期从一个[定期更新的文件] 中解析员工信息 ,插入到数据库中. 按理来说很简单,  无非就是io流读文件,然后crud balalalala..... 其实不是的, 我我写的这个 ...

  7. 【转】linux 定时执行shell脚本

    在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 本文讲述crontab具体用法,以供备忘. 在oracle ...

  8. linux 定时执行shell脚本

    转自:http://blog.csdn.net/jingxiangren/article/details/4745631 在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程, ...

  9. linux crontab定时执行shell脚本

    linux下使用crontab命令被用来提交和管理用户的需要周期性执行的任务,示例如下:crontab -e 编辑周期任务30 21 * * * /etc/init.d/smb restart 每晚的 ...

随机推荐

  1. 简单的 vector

    #pragma once #include <memory.h> #include <stdlib.h> #include <iostream> using std ...

  2. api接口返回动态的json格式?我太难了,尝试一下 linq to json

    一:背景 1. 讲故事 前段时间和一家公司联调api接口的时候,发现一个奇葩的问题,它的api返回的json会动态改变,简化如下: {"Code":101,"Items& ...

  3. hibernate自动创建表报错,提示不存在

    报错:ERROR: HHH000299: Could not complete schema update  或 不能执行statement等 解决方式: 根据mysql版本更改hibernate.c ...

  4. python1.2元组与字典:

    #定义元组(),元组与列表类似但元素不可以更改a=(1,2,3,4,5,6,"a","b","c","d"," ...

  5. three.js 着色器材质之变量(一)

    上一篇说顶点着色器和片元着色器的皮毛,这篇郭先生说一说着色器变量,通过变量可以设置材质.先看看今天要做的如下图.在线案例请点击博客原文. 在这个案例之前,我们先复习一下着色器变量 Uniforms是所 ...

  6. 求解最长递增子序列(LIS) | 动态规划(DP)+ 二分法

    1.题目描述     给定数组arr,返回arr的最长递增子序列. 2.举例     arr={2,1,5,3,6,4,8,9,7},返回的最长递增子序列为{1,3,4,8,9}. 3.解答      ...

  7. idea中GitPush失败问题

    首先是你的项目中有和和历史不符的东西 Push rejected: Push to *****/***** was rejected 推拒绝:推送到起源/主人被拒绝 直接是解决办法,直接打开你要上传代 ...

  8. XCTF-WEB-高手进阶区(1-4)笔记

    1:baby_web 题目描述:想想初始页面是哪个 通过Dirsearch软件扫描发现Index.php被藏起来了,访问他便会指向1.php 于是通过Burp修改Get为index.php,然后放入R ...

  9. c++之广度优先搜索

    广度优先搜索BFS(Breadth First Search)也称为宽度优先搜索,它是一种先生成的结点先扩展的策略. 在广度优先搜索算法中,解答树上结点的扩展是按它们在树中的层次进行的.首先生成第一层 ...

  10. JVM初探(五):类的实例化

    一.概述 我们知道,一个对象在可以被使用之前必须要被正确地实例化.而实例化实际指的就是以一个java类为模板创建对象/实例的过程.比如说常见的 Person = new Person()代码就是一个将 ...