您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

史上最全Linux服务器程序规范

时间:2019-12-26 14:06:08  来源:  作者:

作者:且飙丶且珍惜 来源: http://blog.csdn.net/dextrad_ihacker/article/details/51930998

除了网络通信外,服务器程序还必须考虑许多其他细节问题,零碎,但基本上都是模板式的。 ———引

  • linux服务器程序一般以后台形式运行。后台程序又称守护进程。它没有控制终端,因而也不会意外接受用户输入。守护进程的父进程一般是init进程(pid=1)。
  • Linux服务器程序通常有一套日志系统,它至少能输出日志到文件,有的高级服务器可以输出日志到专门的UDP服务器。大部分后台进程都在/var/log下有自己的日志目录。
  • Linux服务器程序一般以某个专门的非root身份运行。MySQLd, httpd, syslogd等后台进程,并分别有自己的运行账户mysql, Apache, syslog。‘
  • Linux服务器通常时可配置的。服务器程序通常处理很多命令选项,如果一次运行的选项太多,则克拉一用配置文件来管理。绝大多数服务器程序都有配置文件并存放在/etc下
  • Linux服务器程序通常在启动时生成一个PID文件并存入/var/run目录中,以记录该后台进程的PID。
  • Linux服务器程序通常需要考虑系统资源和限制,以预测自身能承受多大负荷,比如进程可用文件描述符总数和内存总量等。

01

日志

1.Linux系统日志:

  • Linux提供一个守护进程来处理系统日志–syslogd, 升级版–rsyslogd。
  • rsyslogd守护进程可以接收用户进程输出日志,可以接受内核日志。
  • 用户进程时通过调用syslog函数生成系统日志的。
  • 该函数将日志输出到一个unix本地域socket类型(AF_UNIX)的文件/dev/log中,rsyslogd则监听该文件以获取用户进程的输出。
  • 内核日志在以前的系统上时通过另一个守护进程rklogd来管理的,rsyslogd利用额外的模块实现了相同的功能。内核日志由printk等换树打印至内核环状缓存中。环状缓存的内容直接映射到/proc/kmsg。
  • rsyslogd通过读取该文件获得内核日志,默认调试信息保存在/var/log/debug,普通信息保存至/var/log/messages,内核信息:/var/log/kern.log。配置文件:/etc/rsyslog.conf,主要设置内核日志输入路径,是否接受UDP日志,及其监听端口(默认514 /etc/services)是否接受TCP日志及其监听端口,日志文件权限,包含哪些配置文件。
史上最全Linux服务器程序规范

 

2.syslog()

应用程序使用syslog()与守护进程rsyslogd通信。

史上最全Linux服务器程序规范

 

该函数采用可变参数(第二个参数message和第三个参数。。。)来结构化输出。

priority:设施值 (按位异或) 日志级别。设施值默认:LOG_USER,下面针对默认设施值,讨论日志级别。

史上最全Linux服务器程序规范

 

2.1下面这个函数可以改变syslog的默认输出方式,进一步结构化日志内容

史上最全Linux服务器程序规范

 

(1)ident:指定字符串将被添加到日志消息的日期和时间之后,通常设为程序的名字。

(2)logopt:对后续syslog调用的行为进行配置,它可取下列值的按位异或

史上最全Linux服务器程序规范

 

(3)facility: 用来修改ysyslog默认设施值

此外,日志过滤也很重要,程序再开发阶段可能需要输出很多调试信息,而发布之后,我们又要将这些调试信息关闭,解决这个问题的方法并不是再程序发布之后,删除调试代码(日后可能还会用到),而是缉拿但地设置日志掩码,使日志级别大于日志掩码的日志被系统忽略。

2.2下面这个函数用于设置syslog的日志掩码。

史上最全Linux服务器程序规范

 

maskpri:指定日志掩码值,该函数始终回成功,它返回调用进程先前的日志掩码值。

2.3关闭日志功能:

史上最全Linux服务器程序规范

 

02

用户信息

1.UID, EUID, GID, EGID

用户信息对于服务器安全很重要,大多说服务器以root启动, 非root运行

史上最全Linux服务器程序规范

 

基础知识:

一个进程拥有两个用户ID, UID, EUID, EUID存在的目的是为了方便资源的访问, 它使得运行程序的用户拥有该程序的有效用户权限,比如,su用来更改账户信息,但修改账户时su程序的所有者是root,在普通用户运行su程序时,其有效用户就是该程序的所有者root, 有效用户为root的进程称为特权进程,EGID与EUID类似,下面演示uid, euid区别:

史上最全Linux服务器程序规范

 

将生成的可执行文件,所有者设置为root,并设置该文件set-user-id标志,然后运行。

测试输出结果看,进程的uid是启动程序的用户id, 而euid是root。

2.切换用户

史上最全Linux服务器程序规范

 

03

进程间关系

1.进程组:

Linux下每一个进程都属于一个进程组,因此他们除了pid之外,还有进程组ID(PGID)。我们用如下函数获取指定进程组PGID.

史上最全Linux服务器程序规范

 

成功返回pid, 失败-1,设置errno。

如果pid与pgid相同,则由pid指定的进程别设置为进程组首领:如果pid为0, 表示当前进程的PGID为pgid;如果pgid为0, 则使用pid作为目标pgid。setpid函数成功时返回0, 失败-1, 设置errno。 一个进程只能设置自己或者其子进程的PGID。并且, 当子进程调用exec系列函数后,我们也不能再在父进程中对他设置PGID。

2.会话

(1)一些有关联的进程将组成一个会话, 下面的函数用于创建一个会话:

史上最全Linux服务器程序规范

 

该函数不能由进程组的首领进程调用,否则将产生一个错误。对于非首领的进程, 调用该函数不仅创建新会话, 而且有如下额外效果。

调用进程成为会话的首领,此时该进程时新会话的唯一成员。 新建一个进程组,其PGID就是调用进程的PID, 调用进程成为该组的首领。 调用进程将甩开终端(如果有)

该函数成功时返回新的进程组PGID, 失败-1, errno。 Linux进程并未提供所谓会话ID的概念, 但Linux系统认为它等于会话首领所在的进程组的PGID, (2)并提供了如下函数读取SID

史上最全Linux服务器程序规范

 

3.用ps命令查看进程关系

执行ps命令可查看进程,进程组和会话之间的关系。

在bash_shell 下执行ps和less命令,所以ps和less命令的父进程时bash命令,这个可以从PPID(父进程PID)一列看出。 这三条命令创建了一个会话(SID是2962)和两个进程组(PGID:2962, 3102)bash命令的PID,PGID和SID都相同,显然它时会话的首领, 也就是组2962的首领。ps时3102的首领,

史上最全Linux服务器程序规范

 

04

系统资源限制

Linux上运行的程序都会受到资源限制的影响,比如物理设备限制(cpu数量,内存数量等),系统策略限制(cup时间等),以及具体实现的限制(文件名最大长度)Linux系统资源限制可以通过如下一对函数来读取和设置: getrlimit , setrlimit

史上最全Linux服务器程序规范

 

rlimit 结构体定义如下:

史上最全Linux服务器程序规范

 

成功返回0, 失败-1, 置errno

rlim_t 是一个整数类型,它描述资源级别

rlim_cur 成员指定资源的软限制,建议性的,最好不要超越的限制,如果超越,系统可能向进程发送信号,并终止运行,如果当前进程CPU时间超过软限制,系统将向进程发送SIGXCPU信号;当文件尺寸超过其软限制时,系统将向进程发送SIZEXFSZ信号。 rlim_max 成员指定资源的硬限制。硬限制一般是软限制的上限,普通程序可以减小应限制,而只有以root身份运行的程序才能增加硬限制,此外我们可以使用ulimit命令修改当前shell环境下的资源限制(软/硬)这种修改对该shell启动的所有后续程序都有效,我们也可以通过修改配置文件来改变系统软限制和应限制,而这种修改时永久的。

resource参数指定资源限制类型。如下表

史上最全Linux服务器程序规范

 

05

改变工作目录和根目录

有些服务器程序好需要改变工作目录和根目录(web /var/www) 获取当前进程工作目录和改变进程的工作目录的函数:

史上最全Linux服务器程序规范

 

buf参数指向的内存用于存储当前工作目录的绝对路径,size指定其大小

如果当前目录的绝对路径超度(+1 (‘’))超过了size,则getcwd返回NULL,errno:ERANG。

chdir中path指向要切换到的目录。成功0, 失败-1 置errno。

改变进程根目录:chroot

史上最全Linux服务器程序规范

 

chroot并不改变进程的当前工作目录,调用chroot之后,仍需要调用chdir(“/”)来将工作转至新的工作目录,之后原来的文件描述符依然生效。所以可以利用早先打开的文件描述符来访问调用chroot之后不能直接访问的文件(目录).

06

服务器程序后台化

最后,如何在代码中让一个进程以守护进程的防止运行,守护进程的编写遵循一定的步骤,下面一个实例。

史上最全Linux服务器程序规范

 

实际上,linux提供了完成同样功能的库函数:

史上最全Linux服务器程序规范

 

nochdir:传0则工作目录将被设置为”/”,否则继续使用当前工作目录。 noclose:传0标准输入输出,标准错误输出都被重定向到,dev/null,否则继续使用原来的设备,成功0, 失败-1 置error。



Tags:Linux服务器   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
今日总监说32 服务器 磁盘占用率 超过80%多了 。不对啊 之前才清理过df -h 查看了一番 果然40g 用了33g。看了下历史会爆目录 也就5.3G 之前是服务生成临时下载的附件多。...【详细内容】
2021-12-10  Tags: Linux服务器  点击:(17)  评论:(0)  加入收藏
在Linux系统下如何分享文件呢,你可能会想到用scp、rsync此类的命令,但都需要给出服务器密码,不安全。或者搭建一个ftp、nfs或samba的服务,分配个账号或划分个权限给其它人共享文...【详细内容】
2021-12-08  Tags: Linux服务器  点击:(17)  评论:(0)  加入收藏
远程登录介绍目前是虚拟化、云计算的时代,今后的运维工作大概率接触不到物理服务器,因为大部分中小型互联网公司出于节省成本、便捷性等因素考虑会直接购买阿里云、腾讯云等云...【详细内容】
2021-10-21  Tags: Linux服务器  点击:(96)  评论:(0)  加入收藏
Linux目录结构说明谈到Linux文件管理,首先我们需要了解的是要对文件做些什么事情,其实无非就是对一个文件进行创建、复制、移动、查看、编辑、压缩、查找、删除等等。 例如我...【详细内容】
2021-10-12  Tags: Linux服务器  点击:(50)  评论:(0)  加入收藏
案例:100W 的客户端,每三分钟上传一次数据。数据库如何设计?能够查询所有记录? 官方 MySQL 集群方案MySQL ReplicationMySQL Replication 是 mysql 自带的功能,主从复制是通过重...【详细内容】
2021-08-05  Tags: Linux服务器  点击:(68)  评论:(0)  加入收藏
在我们平常使用的开发或者测试环境,由于系统日志通常是debug级别,难免会碰到磁盘满的情况,这时候怎么办呢? 01—查找大文件一般来说,我们的系统或者应用通常部署在/opt目录...【详细内容】
2021-03-26  Tags: Linux服务器  点击:(246)  评论:(0)  加入收藏
本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)的工作原理,以及它们的优缺点。1.前言我们先分析实现...【详细内容】
2021-03-11  Tags: Linux服务器  点击:(104)  评论:(0)  加入收藏
重装服务器必备安装-精Linux查看版本当前操作系统内核信息 uname -a cat /proc/versionLinux查看当前操作系统版本信息3、 cat /etc/issue 或cat /etc/redhat-release(看CentO...【详细内容】
2020-09-01  Tags: Linux服务器  点击:(98)  评论:(0)  加入收藏
1、账号安全基本使用:1 )用 户 信 息 文 件 /etc/passwd root:x:0:0:root:/root:/bin/bashaccount:password:UID:GID:GECOS:directory:shell用户名:密码:用户ID:组ID:用户说明:家目...【详细内容】
2020-08-15  Tags: Linux服务器  点击:(157)  评论:(0)  加入收藏
一、RedHat/CentOS包管理1. 包管理工具RPM(1) 简介最早用在 RedHat的包管理器,现在已经成为Linux常见的包管理系统。RPM包有两种类型: 二进制RPM包 源码RPM包可以在www.rpmfi...【详细内容】
2020-08-12  Tags: Linux服务器  点击:(90)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(9)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条