扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
还要循环啊,传入时间参数啊
创新互联建站长期为上千多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为临武企业提供专业的网站设计制作、网站设计,临武网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。
我最近写了一个FTP自动化下载文件的script,你可以参考下:
#!/bin/sh
#==============================================================================#
# 功能描述:标准输出日志
# 作者:
# 返回值: 输入带当前运行时间的标准格式的日志信息
# 说明:
# 输入 日志信息
#
#
#==============================================================================#
_Msg()
{
v_sTime=`date +"%Y%m%d %H:%M:%S"`
echo "${v_sTime} $1" |tee -a -i ${v_sLogFile}
return 0
}
#==============================================================================#
# 功能描述:休眠
# 作者: Created by PW at 2015/11/11
# 返回值:
# 说明:
# 输入休眠时间
#
#
#==============================================================================#
_Sleep()
{
v_iSleepTime=$1
#if -z 如果字符串为空
if [ -z "${v_iSleepTime}" ]
then
v_iSleepTime=60
fi
sleep ${v_iSleepTime}
}
#==============================================================================#
# 功能描述:断开数据库
# 作者:
# 返回值:
# 说明:
#==============================================================================#
_DBClose()
{
db2 terminate 21 /dev/null
_Msg " 断开数据库"
return 0
}
#*********************************************主程序******************************#
#初始化参数
#FTP到本机的目录(本机数据存放目录)
v_sTargetPath=/home/almusr/data/odsdata/FTP
#FTP服务器
FTPSERVER=100.0.2.230
#FTP用户和密码
FTPUSER=tomcat
FTPPASSWORD=tomcat
#FTP之前数据存放目录
FTPDIR=/home/tomcat/test
#FTP完成OK标志生成目录和date_record.txt的存放路径
FTPOK_DIR=/home/almusr/data/etl_load/FTPOK
#cd到date_record.txt所在路径下
cd "${FTPOK_DIR}"
#获取时间参数v_sFileDate
v_date=`cat date_record.txt | tail -1`
echo "${v_date}"
#获取加载完成与否的标志Y or N
v_sRunFlag=`echo "${v_date}" | cut "-b10"`
#判断如果是Y就截取加载日期,否则就继续扫描等待
while true
do
if [[ ${v_sRunFlag} = Y ]]; then
#获取加载日期,先截取v_date的前八位,然后再加 1 就是本次加载的数据日期
v_sFileDate_1=`echo "${v_date}" | cut "-b1-8"`
v_sFileDate=`date -d "+1 day ${v_sFileDate_1}" +%Y%m%d`
echo "${v_sFileDate}"
_Msg "DATE:${v_sFileDate}"
#日志路径
v_sLogDir=/home/almusr/log
#日志名字
v_sLogFile="${v_sLogDir}/ftp_${v_sFileDate}/ftp_${v_sFileDate}.log"
#数据文件列表
v_sFtpGetLst="${v_sTargetPath}/${v_sFileDate}/${v_sFileDate}.lst"
_Msg "###########################$FILEDATE###########################"
_Msg "ftp data of ${v_sFileDate}"
#创建日志目录
#-d 如果不存在目录${v_sLogDir}
if [ ! -d "${v_sLogDir}/ftp_${v_sFileDate}" ]
then
#创建日志路径,以日期命名
mkdir -p "${v_sLogDir}/ftp_${v_sFileDate}"
fi
#创建FTP下日期目录
#-d 如果不存在目录${v_sTargetPath}/${v_sFileDate}
if [ ! -d "${v_sTargetPath}/${v_sFileDate}" ]
then
#创建ETL路径,以日期命名
mkdir -p "${v_sTargetPath}/${v_sFileDate}"
fi
#检查日期OK标志是否存在
while true
do
#cd到FTP下的日期目录
cd ${v_sTargetPath}/${v_sFileDate}
if [[ ! -e "${v_sTargetPath}/${v_sFileDate}/${v_sFileDate}_OK.flag" ]]; then
_Msg "Data file is ok and start to get it."
#获取服务器文件名清单
if [ -f "${v_sFtpGetLst}" ]; then
rm -f ${v_sFtpGetLst}
fi
ftp -v -in DOF
open $FTPSERVER 21
user $FTPUSER $FTPPASSWORD
cd $FTPDIR/${v_sFileDate}
#将该文件夹下所有文件名都写到文件${v_sFtpGetLst}里面
ls *.* ${v_sFtpGetLst}
bye
DOF
#查询文件名清单中是否有 ok标志
v_sEndFlag=`cat "${v_sFtpGetLst}" | grep -i "${v_sFileDate}_OK.flag"`
echo "${v_sEndFlag}"
#if [ -n ${v_sEndFlag} ]如果${v_sEndFlag}非空(非0),返回0(true)
if [[ -n ${v_sEndFlag} -s ${v_sFtpGetLst} ]];
then
_Msg "Data file is ok and start to get it."
#传输数据文件、产生成功标志文件
_Msg "ftp data file"
if [ ! -d "${v_sTargetPath}/${v_sFileDate}" ]
then
mkdir -p "${v_sTargetPath}/${v_sFileDate}"
else
cd ${v_sTargetPath}/${v_sFileDate}
fi
#cd到FTP目录,FTP过去取数据文件
#cd ${v_sTargetPath}/${v_sFileDate}
ftp -v -in FOF
open $FTPSERVER 21
user $FTPUSER $FTPPASSWORD
cd $FTPDIR/${v_sFileDate}
binary
mget *.*
bye
FOF
#创建下载完成标志
touch "${FTPOK_DIR}"/${v_sFileDate}.ok
cd "${FTPOK_DIR}"
#将跑数日期和跑数标志(已跑Y,没跑N)写入date_record.txt
echo "${v_sFileDate}|Y" date_record.txt
break;
else
_Msg "Data file does not exist, sleep 18000 seconds and then check it again."
sleep 18000
fi
fi
done
exit 0
break;
else
_Sleep "1800"
fi
done
exit 0
#####################################################
我的脚本里面采用了初始txt文本传入初始时间,然后判断是否生成加载标志*.ok文件,再定时扫描,加载完成生成加载完成标志,自动化调脚本可以在linux系统下设置一个定时任务,命令:crontab -l 定时任务列表, crontab -e 定时任务编辑
linux下一般都是.so结尾的扩展
win下是dll
不通用
而且最好是重新编译 编译的时候加上这些参数
在 上一篇 中我们简要介绍了 LSF 作业管理系统,下面将介绍 SLURM 资源管理系统。
SLURM (Simple Linux Utility for Resource Management)是一种可用于大型计算节点集群的高度可伸缩和容错的集群管理器和作业调度系统,被世界范围内的超级计算机和计算集群广泛采用。SLURM 维护着一个待处理工作的队列并管理此工作的整体资源利用。它以一种共享或非共享的方式管理可用的计算节点(取决于资源的需求),以供用户执行工作。SLURM 会为任务队列合理地分配资源,并监视作业至其完成。如今,SLURM 已经成为了很多最强大的超级计算机上使用的领先资源管理器,如天河二号上便使用了 SLURM 资源管理系统。
下面是一些最常用的 SLURM 命令:
下表是 SLURM 环境变量:
SLURM 资源管理系统的管理对象包括:节点,分区,作业和作业步。
SLURM 系统有三种作业运行模式:
交互模式作业的使用过程为:
例如使用 srun 申请 4 个进程生成一个作业步:
批处理模式作业的使用过程为:
下面给出作业脚本示例:
用以下命令提交批处理作业:
分配模式作业的使用过程为:
分配模式通过 salloc 命令运行,举例如下(使用 2 个节点,4 个进程,预计运行时间 100 秒):
资源分配请求成功后会进入 bash shell 终端,在其中可以使用 srun 交互式地执行作业任务。在终端输入 exit 命令或 Ctrl+D 退出分配模式。
天河二号上使用的是 SLURM 资源管理系统,不过天河二号上使用的 SLURM 命令都是将标准的 SLURM 命令开头的 s 改成了 yh,如下:
以上介绍了 SLURM 资源管理系统,在 下一篇 中我们将介绍 MPI-3 的新特性。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流