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系统里如何彻底清空中断屏幕
命令:reset4. 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-6:2,3,4,5,6,4)正斜线(/):可以用正斜线指定时间的间隔频率,例如“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》查看文件 mail2》删除文件 cat /dev/null > /var/spool/mail/houlc3》禁止系统启动邮件检查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 退出的中断,确保需要程序推出的时候,程序可以优雅的退出
收获,反思与下一步计划
收获
反思
4. 学习如翻山,走过这座山,方知还有那座山,
学完基础,我以为自己再进一步就可以实际开发了,
结果现在,做了一个项目里的一个小程序,才发现要走的路还很长
5. 我的之前学的很多的基础知识的理解都还很浅薄,实际开发毫无经验,
如果应对稍微复杂一点的开发场景我绝对束手无策,
6. 另外,就眼前要学习做的qxidc项目来说,我也才走了一小步
后边还有很多比较复杂的程序,
7. 涉及到的知识:
ftp协议,ftp采集模块的开发,其他通信协议,oracle环境搭建,oracle的表操作,oracle的事物,shell和环境变量,c语言操作数据库,测试数据处理和入库,工程的组织,oracle的虚表、日期和序列,工程的优化,oracle函数、索引和视图,数据结构设计,数据的处理,更强大 的sql,计算的问题探讨,数据交换子系统,oracle数据库的管理,系统的高可用性,mysql数据库,PostgreSQL数据库,数据库兼容技巧,数据挖掘子系统,htt协议,非结构化数据的存储,数据管理子系统,监控和警告子系统,文件传输系统,app软件服务端。。。
总结
以上是生活随笔为你收集整理的qxidc项目/crtsurfdata程序 杀青总结的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 忽略所有信号导致的程序Ctrl+c和Ct
- 下一篇: 映射递归循环-约瑟夫环问题递归解法的一点