qxidc项目/crtsurfdata程序 杀青总结


遇到问题 与 解决办法

1. 关于文件类打开操作函数不自动创建不存在的父目录问题

1. crtsurfdata.cpp中,有用到CFile类的成员函数Open
	**这里出现了一个问题**,
	如果所打开的文件的父目录不存在,它不会自动创建父目录,而是返回false
	但在程序里,当我删除ftp目录时,我打开data/ftp/crtsurfdata目录时
	日志:
	FIle.Open(/home/houlc/qxidc/data/ftp/surfdata/SURF_ZH_20200722230447_3461)失败!
	就是因为没有了父目录,
	
2. **这里有两解决办法**
	1:在项目的程序代码里,打开如果 失败,则创建父目录(调用MKDIR函数实现)
	2:在库函数的Cfile::Open的代码中,把fopen用FOPEN(这里有调用MKDIR)替换
	
3. **我的思考**1>>这里我想来想去,觉得应该用第一种方法,
    尽管我下意识就想用第二种方法,
    但是考虑到,库函数不能把项目中所有的需求都考虑的太自动化而不灵活了,
    如果采用第二种解决办法,那我以后遇到项目,Open到不存在的目录时,
    不想创建它,就想要他的false返回值 怎么办?
	
	2>>所以,就调用MKDIR在项目程序里面,
	当CFile::Open返回false时,就MKDIR它就好
	----*虽然后来发现吴哥用的第一种方法吧,,,*
	     不过我还是觉得我的解决办法好,多写一行MKDIR也没费什么功夫
	-----**又才发现打开日志的问价CLogFIle::Open也是自动创建父目录**。。。。
	     无语。。。
	     不过这可能和需求有关,
	     因为这是你要写日志,一定是要有指定目录存在的,
	     如果父目录不存在,那就创建它,
	     这个写日志的操作是"情景要求明确的""然而File::Open的项目情景并不清晰"所以我觉得不能把FOPEN
	(打开,打不开就创建)直接写进Open里面,
	这样如果不需要自动创建,就直接调用File::Open,
	如果需要自动创建,
	则在项目程序代码中加一行if false ,MKDIR就好,并没有费多大功夫

2. 如何解决xshell连接成功但无法输入命令

	一般都是你在输入命令时,按了Ctrl+s锁定命令行
	Ctrl+q即可解锁命令行
	

3. Linux系统里如何彻底清空中断屏幕

	命令:reset
	

4. Linux命令行上执行操作,不退回命令行的解决办法


	使用 1>test.log来重定向操作的输出
	如
	python GetDeviceData.py 1>websocket_success.log 2>websocket_error.log &
	

5. 执行程序中, 如果 忽略所有信号,无法退出程序的问题

// 关闭全部的信号和输入输出
	void CloseIOAndSignal()
	{
	  int ii=0;
	  for (ii=0;ii<100;ii++)
	  {
	    signal(ii,SIG_IGN); close(ii);
	  }
	}
	那么Ctrl+z被忽略,最后程序如果是死循环,会很难退出,用Ctrl+c
	也不行,常规杀程序也解决不了,最后用
	kill -9 进程编号 命令解决的
	

6. 关于常驻内存与任务调度的设计

 这个程序60s才很快的运行一次,不需要他常驻内存,浪费资源

7. 任务调度crontab

	***一、Crontab -e 编辑调度文件***
	布置任务:
	 */1 * * * *  /home/houlc/qxidc/bin/crtsurfdata
	【格式:前五个是时间设定段,第六段是要执行的命令段】
	【Min hour day month week command】
	在以上各个字段中,还可以使用以下的特殊字符:
	1)星号(*):代表所有可能的该时间的值,
	2)逗号(,):可以用逗号隔开的值指定一个列表范围
	3)中杠(-):可以用证书之间的中杠表示一个整数的范围:2-6234564)正斜线(/):可以用正斜线指定时间的间隔频率,
	   例如“0-23/2”表示每两个小时执行一次。
	    同时,正斜线可以和星号一起使用,
	    例如*/10,如果用在minute字段,表示没十分钟执行一次
	***二、crontab服务***
	1)service cron start // 启动服务
	2)service cron stop // 关闭服务
	2.5)service cron restart //重启服务
        3)service cron reload // 重新载入配置
	4)service cron status // 查看服务状态
	***三、查看服务是否已经运行***
	        ps -ax | grep cron
```cpp
***四、crontab 命令选项***
	1-u 指定一个用户
	2-l 列出某个用户的任务计划
	3-r 删除某个用户的任务
	4-e 编辑某个用户的任务
	***五、新增任务调度***
	1-在命令行输入:crontab -e,然后添加相应的任务,wq存盘退出
	2-直接编辑/etc/crontab 文件,即 vi /etc/crontab,添加相应的任务
	***六、查看任务调度***
	1=1   crontab -l            //列出当前所有的调度任务
	2=2  crontab -l -u -jp   //列出用户jp的所有调度任务
	

7. 解决“您在”/,/,/,中有新邮件"问题

	1》查看文件  mail
	2》删除文件  cat /dev/null > /var/spool/mail/houlc
	3》禁止系统启动邮件检查
	Echo "unset MAILCHECK" >> /etc/profile
	这样就不会再有邮件提示了 
	
在这里插入代码片

mail-问题解决办法


程序实现的效果

1.通过crontab任务调度,每分钟调用一次/home/houlc/qxidc/bin/crtsurfdata /home/houlc/qxidc/ini/inicode.ini /home/houlc/qxidc/data/ftp/surfdata /home/houlc/qxidc/log/crtsurfdata.log
2.程序自动从原始数据存放的文件夹中提取数据,并生成目标类型的数据结构,存入相应的容器,最后写生成的数据文件,存放到指定的数据文件目录中。
3、程序将程序运行的情况写入日志(标有时间和事件),日志尽可能详细
4、程序最开始忽略了所有的信号,又单独设置了Ctrl+c和kill 退出的中断,确保需要程序推出的时候,程序可以优雅的退出


收获,反思与下一步计划

收获

  1. 走通了一个小小的数据提取和数据文件生成的程序的大体开发流程
  2. 进一步丰富和熟悉了自己的函数库
  3. 实现了一个具体的功能蛮开心的

反思
4. 学习如翻山,走过这座山,方知还有那座山,
学完基础,我以为自己再进一步就可以实际开发了,
结果现在,做了一个项目里的一个小程序,才发现要走的路还很长
5. 我的之前学的很多的基础知识的理解都还很浅薄,实际开发毫无经验,
如果应对稍微复杂一点的开发场景我绝对束手无策,
6. 另外,就眼前要学习做的qxidc项目来说,我也才走了一小步
后边还有很多比较复杂的程序,
7. 涉及到的知识:
ftp协议,ftp采集模块的开发,其他通信协议,oracle环境搭建,oracle的表操作,oracle的事物,shell和环境变量,c语言操作数据库,测试数据处理和入库,工程的组织,oracle的虚表、日期和序列,工程的优化,oracle函数、索引和视图,数据结构设计,数据的处理,更强大 的sql,计算的问题探讨,数据交换子系统,oracle数据库的管理,系统的高可用性,mysql数据库,PostgreSQL数据库,数据库兼容技巧,数据挖掘子系统,htt协议,非结构化数据的存储,数据管理子系统,监控和警告子系统,文件传输系统,app软件服务端。。。

我的天,我还仅仅是写了个采集数据的小程序而已,后面的路还很长
这一年的时间很紧迫了
但是没关系,我一步一步已经学了这么多了,
后面一步一步我也一定可以走完的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值