气象项目数据中心开发-服务器-1

开发环境

  • CentOS7.2.3/ SSH客户端SecureCRT
  • MySQL 5.7 客户端Navicat Premium
  • 编译器gcc、g++
  • 字符集utf-8

上传项目源代码和开发框架

  1. 使用sftp从本地平台上传项目源代码project.tgz至服务器【SecureCRT7.2.3汉化补丁漏洞在显示时出现“??。?乱码问题”】
    在这里插入图片描述

  2. 切换至root用户,在根目录下解压源代码压缩包
    在这里插入图片描述
    解压完成
    在这里插入图片描述

  3. 将根目录下的project文件权限授权给普通用户
    在这里插入图片描述
    在这里插入图片描述

/project项目文件结构

在这里插入图片描述

开发永不停机的服务程序

原因:【程序的异常】

  • 程序死掉或闪退是普遍现象,最好的解决方案是重启;
  • 后台服务程序无人值守,没有界面

开发目标:

  • 用守护进程监控服务程序的运行状态
  • 如果服务程序发生故障,调度进程将重启服务程序
  • 保证系统7x24小时不间断运行

生成测试数据

1.全国气象站点数据

在这里插入图片描述
查看
在这里插入图片描述

2.全国气象分钟观测数据

生成测试数据流程
在这里插入图片描述

1)搭建程序框架

  1. 创建idc2目录,进入再创建bin c ini sql四个子目录
    在这里插入图片描述

拷贝站点参数文件
在这里插入图片描述

  1. 在c中写程序crtsurfdata1.cpp、构建自动化编译脚本makefile

在这里插入图片描述
在这里插入图片描述

3.1 定义项目需要的类和容器

struct st_stcode // 全国气象站点参数结构体。{
  char provname[31]; // 省  
  char obtid[11];    // 站号  
  char obtname[31];  // 站名  
  double lat;        // 纬度  
  double lon;        // 经度  
  double height;     // 海拔高度
  };

vector<struct st_stcode> vstcode;// 存放全国气象站点参数的容器。
bool LoadSTCode(const char *inifile);// 把站点参数文件中加载到vstcode容器中。
CLogFile logfile;    // 日志类。

3.2 在main中给出crtsurfdata1.cpp的输入样例,判断输入的合法性

if (argc!=4) 
{    // 如果参数非法,给出帮助文档。  printf("Using:./crtsurfdata2 inifile outpath logfile\n");
  printf("Example:/project/idc1/bin/crtsurfdata2 /project/idc1/ini/stcode.ini /tmp/surfdata /log/idc/crtsurfdata2.log\n\n");

  printf("inifile 全国气象站点参数文件名。\n");
  printf("outpath 全国气象站点数据文件存放的目录。\n");
  printf("logfile 本程序运行的日志文件名。\n\n");

  return -1;
}

3.3 把站点参数文件中加载到vstcode容器中。

if (logfile.Open(argv[3],"a+",false)==false)// 打开程序的日志文件。{
  printf("logfile.Open(%s) failed.\n",argv[3]); return -1;
}
logfile.Write("crtsurfdata2 开始运行。\n");

if (LoadSTCode(argv[1])==false) return -1;// 把站点参数文件中加载到vstcode容器中。
logfile.WriteEx("crtsurfdata2 运行结束。\n");

在这里插入图片描述

  1. 测试crtsurfdata1.cpp ,使用CLogFile类进行日志操作相关事宜
    在这里插入图片描述

2)加载站点参数

struct st_stcode // 全国气象站点参数结构体。{
  char provname[31]; // 省  
  char obtid[11];    // 站号  
  char obtname[31];  // 站名  
  double lat;        // 纬度  
  double lon;        // 经度  
  double height;     // 海拔高度};

定义LoadSTCode类把站点参数文件中加载到vstcode容器中。

bool LoadSTCode(const char *inifile)// 把站点参数文件中加载到vstcode容器中。{
  CFile File;
  
  if (File.Open(inifile,"r")==false)// 打开站点参数文件。  {
    logfile.Write("File.Open(%s) failed.\n",inifile); return false;
  }

  char strBuffer[301];

  CCmdStr CmdStr;

  struct st_stcode stcode;

  while (true)
  {

    if (File.Fgets(strBuffer,300,true)==false) break;// 从站点参数文件中读取一行,如果已读取完,跳出循环。  
      CmdStr.SplitToCmd(strBuffer,",",true);// 把读取到的一行拆分。   
    if (CmdStr.CmdCount()!=6) continue;     // 扔掉无效的行。   
     memset(&stcode,0,sizeof(struct st_stcode));// 把站点参数的每个数据项保存到站点参数结构体中。    
     CmdStr.GetValue(0, stcode.provname,30); // 省   
     CmdStr.GetValue(1, stcode.obtid,10);    // 站号   
     CmdStr.GetValue(2, stcode.obtname,30);  // 站名    
     CmdStr.GetValue(3,&stcode.lat);         // 纬度    
     CmdStr.GetValue(4,&stcode.lon);         // 经度    
     CmdStr.GetValue(5,&stcode.height);      // 海拔高度    
     vstcode.push_back(stcode);// 把站点参数结构体放入站点参数容器。  
  }

进行输出测试

添加输出测试语句

for (int ii=0;ii<vstcode.size();ii++)  
 logfile.Write("provname=%s,obtid=%s,obtname=%s,lat=%.2f,lon=%.2f,height=%.2f\n",\                
 vstcode[ii].provname,vstcode[ii].obtid,vstcode[ii].obtname,vstcode[ii].lat,\                
 vstcode[ii].lon,vstcode[ii].height);

可以在crtsurfdata2.log中查看
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值