最近在做一个Linux系统方案的设计,写了一个之前升级服务程序的配置和日志管理。

共4个文件,服务端一个UpdateServer.conf配置文件和一个UpdateServer脚本,客户端一个UpdateClinet.conf配置文件和一个UpdateClient脚本。
配置文件里主要写一些路径变量,文件名变量,IP地址变量,涉及路径最好用绝对路径。配置文件用来给用户提供修改程序执行环境和相关输入信息。

而执行脚本就写具体如何实施,包括,显示时间,执行程序,重定向等。

具体笔记如下:

01. 脚本读取另一个脚本,用了两种方法:

 . Update.conf #第一种

 while read line;do   #第二种,均可以在文件前加路径
eval "$line" done < Update.conf

读取了之后就可以直接$引用其中的变量。

02. shell中系统时间显示方法:

date "+%F %H:%M:%S"

C语言中可以用如下显示:

time_t now ;
struct tm *tm_now ;
time(&now) ;
tm_now = localtime(&now) ;
printf("\n%04d-%02d-%02d %02d:%02d:%02d\n",
tm_now->tm_year+, tm_now->tm_mon+, tm_now->tm_mday, tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec) ;

03. 在进行程序输出重定向的时候遇到了无法实时重定向的问题,只有程序运行结束了才会写入文件,而实际中需要持续运行的程序输出的同时记录在log文件中。

经过测试,在Linux中,c语言编译出来的程序不像shell脚本那样一行一行的执行,实时显示,而printf的输出原理是利用缓冲区输出stdout,在终端输出情况下,它是行输出模式,也就是说遇到换行符就输出,如果程序当中有while(1)或者sleep()这种,实际上会等缓冲区满了才输出,因此会出现有死循环时屏幕上没有输出的情况。

贴一个论坛上smallnat的解释:

用printf()输出时是先输出到缓冲区,然后再从缓冲区送到屏幕上。

. 使用fflush(stdout)强制刷新。
.缓冲区已满。
.scanf()要在缓冲区里取数据时会先将缓冲区刷新。
.\n,\r进入缓冲区时。
.线程结束的时候,如果该线程里也有printf(....);
. 程序结束时。

因此,在printf()后面跟一个fflush(stdout)是可以实现的,另外,还找到有一个方法:

改变 stdout默认buffer为无buffer,即在程序的开始加入:
setvbuf(stdout, (char *) NULL, _IOLBF, 0);

可解决。

另外,要是想在屏幕上显示输出结果的同时又重定向进文件,可以用 | tee -a log.

04. Socket编程中服务端要获取连接客户端的ip地址的方法:

accept(socket_ser,&addr,&addr_len);
printf("%s\n",inet_ntoa(addr.sin_addr));

05. 交换两个不同目录中的同名文件,用mv指令可以做到:

mv bin/A Atmp
mv A bin/A
mv Atmp A

写一个简单的配置文件和日志管理(shell)的更多相关文章

  1. LogCook 一个简单实用的Android日志管理工具

    众所周知,日志的管理是软件系统很重要的一部分,千万不可忽略其重要性.完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样,日志就像对系统进行分析的工具,工具便捷了,对系统分析起来就能 ...

  2. laravel学习:php写一个简单的ioc服务管理容器

    php写一个简单的ioc服务管理容器 原创: 陈晨 CoderStory 2018-01-14 最近学习laravel框架,了解到laravel核心是一个大容器,这个容器负责几乎所有服务组件的实例化以 ...

  3. 一个简单好用的日志框架NLog

    之前我介绍过如何使用log4net来记录日志,但最近喜欢上了另一个简单好用的日志框架NLog. 关于NLog和log4net的比较这里就不多讨论了,感兴趣的朋友可以参看.NET日志工具介绍和log4n ...

  4. 利用SpringBoot+Logback手写一个简单的链路追踪

    目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简 ...

  5. express 写一个简单的web app

    之前写过一个简单的web app, 能够完成注册登录,展示列表,CURD 但是版本好像旧了,今天想写一个简单的API 供移动端调用 1.下载最新的node https://nodejs.org/zh- ...

  6. (原创)如何使用boost.asio写一个简单的通信程序(一)

    boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介 ...

  7. linux设备驱动第三篇:如何写一个简单的字符设备驱动?

    在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动.本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存 ...

  8. 用node.js从零开始去写一个简单的爬虫

    如果你不会Python语言,正好又是一个node.js小白,看完这篇文章之后,一定会觉得受益匪浅,感受到自己又新get到了一门技能,如何用node.js从零开始去写一个简单的爬虫,十分钟时间就能搞定, ...

  9. linux设备驱动第三篇:写一个简单的字符设备驱动

          在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动.本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分 ...

随机推荐

  1. js 错误Error对象详解

    一.概念 error,指程序中的非正常运行状态,在其他编程语言中称为"异常"或"错误".解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信 ...

  2. mysql一致性读

    Consistent Nonlocking Reads 一致读意味着InnoDB用多版本来提供一个查询数据库某个时间点的快照.这种查询可以看到在当前世界点之前事务提交的改变,看不到此后提交的改变,更看 ...

  3. 关于javascript代码优化的8点建议

    前面的话 本文将详细介绍JS编程风格的几个要点 松耦合 当修改一个组件而不需要更改其他组件时,就做到了松耦合 1.将JS从CSS中抽离:不要使用CSS表达式 //不好的做法 .box{width: e ...

  4. mysql数据库-------基础

    一 数据库是什么 把文件存放于一台机器,然后将多台机器通过网络去访问这台机器上的文件,即共享这台机器上的文件,共享则意味着竞争,会发生数据不安全,需要加锁处理,为了远程访问并处理这台共享机器上的文件, ...

  5. AspNet Core 核心 通过依赖注入(注入服务)

    说起依赖注入 相信大家已经很熟悉了,这里我在简要的描述一遍, 什么是依赖注入: 我们从字面意义上来解释一下:依赖代表着两个或者多个对象之间存在某些特定的联系:举一个不是很恰当的例子 比如说一度夫妻组成 ...

  6. 使用Python实现的杨辉三角

    def triangel(): print ' '*(20*3)+str(1) #定义起始两行 print ' '*(19*3)+str(1)+' '*5+str(1) for i in range( ...

  7. (转)Linux下运行python

    原文: http://blog.csdn.net/jackywgw/article/details/48847187 在linux命令行下运行python,可以直接输出hello world jack ...

  8. 做了一个web版的 MyBatis Generator

    mybatis 官方提供了 MyBatis Generator ,可以通过 xml 配置文件的方式使用,例如自己写调用脚本,或者使用 mvn 插件的方式,其实实现起来还是很简单的.虽然简单,但还是不够 ...

  9. [已解决]import pymssql ImportError: libsybdb.so.5

    在python3.6的环境下安装pymssql安装包,运行程序时报错:import pymssql ImportError: libsybdb.so.5 在网上搜索了一大圈很多都是讲文件存在但是没有添 ...

  10. springboot整合mybaits注解开发

    springboot整合mybaits注解开发时,返回json或者map对象时,如果一个字段的value为空,需要更改springboot的配置文件 mybatis: configuration: c ...