7-liunx服务器规范

目录

  • 概况
    • liunx日志
      • liunx系统日志
      • syslog函数
        • openlog 可以改变syslog默认输出方式 ,进一步结构化
    • 用户信息
    • 进程间的关系
    • 会话
        • ps命令查看进程关系
    • 系统资源限制
    • 改变工作目录和根目录
    • 服务器程序后台话

概况

liunx服务器上有很多细节需要注意 ,这些细节很重要而且是 模版状,称为服务器规范
比如

  • 服务器程序一般在后台运行,又称为守护进程,没有控制终端,因此,不会意外收到用户输入,它们的父进程一般是init进程 PID为1的进程
  • liunx服务器程序一般以非root权限运行,而且有自己的运行账户,比如mysql,apache 和syslog等
  • liunx服务器程序是可配置的,通常有很多命令行选项,可以针对不同的情况采取不同的措施,这些程序一般有自己的配置文件,配置文件一般放在/etc目录下面
  • liunx服务器启动的时候会生成一个PID文件存入 /var/run目录下面 以记录后台进程的PID 比如syslog的pid文件是/var/run/syslogd.pid
  • 服务器程序需要考虑系统资源和限制 ,预测自身能承受多大符合,比如进程可用文件描述符总数和内存总量.

liunx日志

liunx系统日志

服务器的调试和维护都需要一个专业的日志系统,liunx提供一个守护进程来处理日志 —syslogd
现在liunx用到的都是他的升级版 — rsyslogd


rsyslogd 既能接受用户日志 也能接受内核日志 用户调用syslog来将信息输出到本地UNIX域中的socket类型的文件/dev/log rsyslog则监听该文件以获取 用户进程的输出。
在老系统上内核日志是通过守护进程rklogd来管理的。 rsyslogd利用额外的模块来实现了相同的功能。内核日志由printk等函数打印到内核的环状缓存中 环状缓存中的内容直接映射到/proc/kmsg文件中. rsyslogd则通过读取该文件获得内核日志。


rsyslogd守护进程收到用户进程或者内核输入的日志后 会输出到指定的日志文件中,这些都是可以配置的

  • 默认情况下调试信息回报错在/var/log/debug文件,普通信息报错在/var/log/messages文件 内核消息保存在/var/log/kern.log文件
  • 日志系统如何分发可以在/etc/rsyslog.conf中。主要可以设置的项包括,内核日志输出路径,是否接受UDP日志及监听端口(默认514 在、/ect/services文件),是否接受TCP日志及监听端口,日志文件的权限,包含那些子配置文件(/etc/rsyslog.d/*.conf) 这些配置文件指定各类日志的目标存储文件

一图概括
在这里插入图片描述

syslog函数

应用程序采用syslog函数和rsyslogd守护进程通信,定义如下
在这里插入图片描述

第一个参数是日志级别
第二个可变参数 用于输出具体日志内容
日志级别如下

在这里插入图片描述

openlog 可以改变syslog默认输出方式 ,进一步结构化

在这里插入图片描述

  • ident 将被添加到日志消息的日期和时间之后 常被设置为程序的名称
  • logopt参数对后续syslog调用的行为进行配置 下面为可取值
    在这里插入图片描述
    -facility参数可用来修改syslog函数中的默认设施值

还可以通过设置日志掩码 来保证发布的程序不会出现大量的日志日志级别大于日志掩码的日志信息将会被忽略
在这里插入图片描述
maskpri 指定日志掩码值 返回该进程之前的日志掩码值
调用完后日志 需要通过下面函数关闭日志
在这里插入图片描述

用户信息

大部分服务器以root身份启动,但不能以root的身份运行。这关乎用户信息的安全性。
下面函数可以获取和设置当前进程的真实用户,有效用户,真实组,有效组。

在这里插入图片描述
一个进程有两个用户ID:UID 和EUID。
EUID存在的目的是为了方便资源访问:让运行程序的用户拥有有效用户的权限
任何用户都能用su程序来修改自己的账号信息 ,因为su程序的有效用户是root,可以访问到/etc/passwd文件 su程序被设置成了set-user-id.
任何运行su程序的普通用户都能访问/etc/passwd文件。有效用户为root的进程被称为特权进程

进程间的关系

liunx下面的每一个进程 有自己的pid 也有进程组ID(PGID)
通过下面函数获取指定进程的PGID
在这里插入图片描述
成功返回进程所属PGID,失败则返回-1 并设置errno
设置PGID
在这里插入图片描述
该函数将PID为pid的进程PGID设置为pgid,如果pid和pgid相同,则把pid对应的进程设置为进程组首领。如果pid为0 ,则表示当前进程的PGID 为pgid 如果pgid为0 ,则使用pid作为目标PGID。setgid函数成功时返回0,失败则返回-1并设置erron
注意:一个进程只能设置自己或者其子进程的PGID ,并且,当子进程调用exec相关函数后,
我们不能再在父进程中它设置PGID

会话

一些有关联的进程组将会形成一个会话,下面函数用于创建一个会话
在这里插入图片描述
该函数如果由进程组的首领调用的话 会产生一个错误,对于非组首领进程,调用该函数不仅会创建新会话,而且有以下效果

  • 调用进程会成为会话的首领 ,此时该进程是新会话的唯一成员.
  • 新建的一个进程组 ,其PGID就是调用进程的PID 调用进程称为了该组的首领
  • 调用进程将甩开终端
    该函数调用成功将返回新的进程组PGID 失败返回-1 并设置errno

liunx进程并未提供所谓的会话ID的概念,但liunx系统认为它等于会话首领所在的进程组PGID
并提供了如下函数来读取SID
在这里插入图片描述

ps命令查看进程关系

在这里插入图片描述

系统资源限制

liunx上面的程序会收到资源限制,如物理设备限制(CPU 数量 内存数量). 系统策略限制等。以及具体的视线
liunx系统资源限制可以通过下一对函数来读取和设置
在这里插入图片描述
在这里插入图片描述
rlim参数是rlimit 结构体类型的指针 rlimit结构体的定义如下
在这里插入图片描述
两个参数 cur 和 max 分别表示资源的软限制和硬限制 ,都是整数类型。软限制是一个建议,最好不要超过。超过就可能被终止运行。如文件超过尺寸。如进程的cpu时间超越其限制。我们可以使用ulimit修改当前shell环境下面的限制 但是一般只是暂时的 只有修改相关的配置文件 来改变系统的软限制和硬限制才是永久的


下面表格列出来比较重要的资源限制

在这里插入图片描述
在这里插入图片描述
ulimit -a 可以查看相关的资源限制

改变工作目录和根目录

有些服务器程序需要改变工作目录和根目录。
获取进程当前工作目录和改变进程工作目录的函数分别是
在这里插入图片描述
buf参数指向的内存 存储进程当前工作目录的绝对路径名,其大小由size参数指定
如果当前工作目录的绝对路径长度(加上一个空结束字符 \0) 超过了size,则getcwd 将返回NULL,并设置error 为ERANGE。
如果buf为NULL并且siz 非 0 则getcwd可能在内部使用malloc动态分配内存,并将进程的当前工作目录存储其中,这种情况我们需要手动释放这块内存。
getcwd函数成功时返回一个指向目标存储区(buf指向的缓存区 或是getcwd 在内部动态创建的缓存区指针) 失败则返回NULL并设置errno


chdir 函数的path参数指定要切换到的目标目录 。成功时返回0 失败时返回 -1 并设置errno


改变进程根目录的函数是chroot :
在这里插入图片描述
path参数指定要切换的目标根目录 。成功时返回 0 失败时返回-1 并设置errno chroot并不改变进程当前工作目录 ,所以调用chroot之后 人需要使用chdir(“/”)来将工作目录切换到新的根目录。
而且改变进程根目录后,程序可能无法方位类似/dev 的文件 和(目录)因为这些文件 并非处于新的根目录之下 。不过好在调用chroot之后,进程原先打开的文件描述符依然有用。所以。可以店里用早打开的文件描述符来访问chroot之后不能直接放文件的文件。尤其是一些日志文件。只有特定进程才能改变根目录。

服务器程序后台话

下面程序展现了 如何将一个程序后台化 ,以守护进程的方式运行。

bool daemonize()
{pid_t pid = fork();if ( pid < 0 ){return false;}else if ( pid > 0 ){exit( 0 );}umask( 0 );pid_t sid = setsid();if ( sid < 0 ){return false;}if ( ( chdir( "/" ) ) < 0 ){/* Log the failure */return false;}close( STDIN_FILENO );close( STDOUT_FILENO );close( STDERR_FILENO );open( "/dev/null", O_RDONLY );open( "/dev/null", O_RDWR );open( "/dev/null", O_RDWR );return true;
}

可以直接调用下面的库函数 来完成同样的功能
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2803262.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Redis进阶篇

Redis线程模型 redis是基于内存运行的高性能k-v数据库&#xff0c;6.x之前是单线程, 对外提供的键值存储服务的主要流程 是单线程&#xff0c;也就是网络 IO 和数据读写是由单个线程来完成&#xff0c;6.x之后引入多线程而键值对读写命 令仍然是单线程处理的&#xff0c;所以 …

智能未来之路:《NIST AI RMF 1.0》与负责任的AI发展

引言 在当今快速发展的人工智能领域&#xff0c;美国国家标准与技术研究院&#xff08;NIST&#xff09;发布的《NIST AI RMF 1.0》框架是一个标志性的里程碑。这一框架不仅为AI技术的负责任和可信赖使用提供了重要指导&#xff0c;而且对于推动可持续的AI发展具有深远影响。本…

CrossOver虚拟机软件2024有哪些功能?最新版本支持哪些游戏?

CrossOver由codewaver公司开发的类虚拟机软件&#xff0c;目的是使linux和Mac OS X操作系统和window系统兼容。CrossOver不像Parallels或VMware的模拟器&#xff0c;而是实实在在Mac OS X系统上运行的一个软件。CrossOvers能够直接在Mac上运行Windows软件与游戏&#xff0c;而不…

创建型设计模式 - 原型设计模式 - JAVA

原型设计模式 一 .简介二. 案例三. 补充知识 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一 .简介 原型模式提供了一种机制&#xff0c;可以将原始对象复制到新对象&#xff0…

一文读懂什么是 IP 欺骗

IP欺骗被认为是最容易发起且最具破坏性的攻击之一。这种攻击方式通过伪造源IP地址来隐藏攻击者的真实身份&#xff0c;从而可以逃避追踪和封锁。由于IP欺骗的隐蔽性和难以追踪性&#xff0c;它经常被用于发起各种恶意攻击&#xff0c;如DDoS攻击、网络钓鱼和诈骗、内部网络攻击…

DM数据库学习之路(十八)DMHS数据实时同步软件部署及迁移测试

​​​​​ DMDRS介绍 产品介绍 达梦数据实时同步软件&#xff08;以下简称 DMDRS&#xff09;是支持异构环境的高性能、高可靠、高可扩展数据库实时同步复制系统。该产品采用基于日志的结构化数据复制技术&#xff0c;不依赖主机上源数据库的触发器或者规则&#xff0c;对主…

docker部署seata1.6.0

docker部署seata1.6.0 Seata 是 阿里巴巴 开源的 分布式事务中间件&#xff0c;解决 微服务 场景下面临的分布式事务问题。需要先搭建seata服务端然后与springcloud的集成以实现分布式事务控制的过程 &#xff0c;项目中只需要在远程调用APi服务的方法上使用注解 GlobalTransa…

电商+支付双系统项目------电商系统中收货模块的开发

本篇文章是讲关于项目的收货地址模块的设计。这个就比较简单了&#xff0c;我就不像之前的文章讲的那么详细了&#xff0c;就简单讲讲就好。 首先先设计 DAO 层&#xff1a; package com.imooc.mall.dao;import com.imooc.mall.pojo.Shipping; import org.apache.ibatis.annot…

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测 目录 分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测分类效果基本描述程序设计参考资…

Unity接入SQLite (一):SQLite介绍

1.简介 SQLite是一个开源的嵌入式关系数据库管理系统。它是一种轻量级的数据库引擎&#xff0c;不需要单独的服务器进程&#xff0c;可以直接嵌入到应用程序中使用。Sqlite使用简单、高效&#xff0c;并且具有对标准SQL的完整支持。它适用于需要在本地存储和访问数据的应用程序…

wordpress免费主题模板

免费大图wordpress主题 首页是一张大图的免费wordpress主题模板。简洁实用&#xff0c;易上手。 https://www.jianzhanpress.com/?p5857 wordpress免费模板 动态效果的wordpress免费模板&#xff0c;banner是动态图片效果&#xff0c;视觉效果不错。 https://www.jianzhan…

C++从入门到精通 第六章(函数)

写在前面&#xff1a; 本系列专栏主要介绍C的相关知识&#xff0c;思路以下面的参考链接教程为主&#xff0c;大部分笔记也出自该教程&#xff0c;笔者的原创部分主要在示例代码的注释部分。除了参考下面的链接教程以外&#xff0c;笔者还参考了其它的一些C教材&#xff08;比…

学习Markdown

https://shadows.brumm.af 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些…

什么是MapReduce

1.1 MapReduce到底是什么 Hadoop MapReduce是一个软件框架&#xff0c;基于该框架能够容易地编写应用程序&#xff0c;这些应用程序能够运行在由上千个商用机器组成的大集群上&#xff0c;并以一种可靠的&#xff0c;具有容错能力的方式并行地处理上TB级别的海量数据集。这个定…

Flutter插件开发指南01: 通道Channel的编写与实现

Flutter插件开发指南01: 通道Channel的编写与实现 视频 https://www.bilibili.com/video/BV1ih4y1E7E3/ 前言 本文将会通过一个加法计算&#xff0c;来实现 Channel 的双向通讯&#xff0c;让大家有个一个体会。 Flutter插件 Flutter插件是Flutter应用程序与原生平台之间的桥…

1.CSS单位总结

CSS 单位总结 经典真题 px 和 em 的区别 CSS 中的哪些单位 首先&#xff0c;在 CSS 中&#xff0c;单位分为两大类&#xff0c;绝对长度单位和相对长度单位。 绝对长度单位 我们先来说这个&#xff0c;绝对长度单位最好理解&#xff0c;和我们现实生活中是一样的。在我们…

WordPress关键漏洞影响25000+站点;Cisco漏洞被勒索软件利用;朝鲜黑客瞄准全球国防公司 | 安全周报 0223

1. CISA警告&#xff1a;Akira勒索软件正在利用Cisco ASA/FTD 漏洞 近日&#xff0c;美国网络安全和基础设施安全局&#xff08;CISA&#xff09;发布了一份警告&#xff0c;指出Akira勒索软件正在积极利用Cisco的Adaptive Security Appliance (ASA) 和 Firepower Threat Defe…

2022云边协同大会:核心内容与学习收获(附大会核心PPT下载)

云计算进入惠普发展期&#xff0c;边缘计算需求激增&#xff0c;云边协同成为未来重要演进方向。同时&#xff0c;5G的规模建设和边缘计算的持续部署&#xff0c;驱动数据处理向边端扩散&#xff0c;使算力走向泛在化&#xff0c;云边端一体化驱动算力更好的满足社会各界不同需…

普中51单片机学习(DS1302)

DS1302时钟 DS1302实时时钟具有能计算2100年之前的秒、分、时、日、日期、星期、月、年的能力&#xff0c;还有闰年调整的能力。内部含有31个字节静态RAM&#xff0c;可提供用户访问。采用串行数据传送方式&#xff0c;使得管脚数量最少&#xff0c;简单SPI 3线接口。工作电压…

辩证易货模式做成App的可行性分析

随着科技的进步和移动互联网的普及&#xff0c;越来越多的传统业务模式开始寻求数字化转型&#xff0c;以适应市场的发展和满足用户的需求。易货模式&#xff0c;作为一种古老而又现代的交易方式&#xff0c;同样面临着这样的机遇和挑战。那么&#xff0c;将辩证易货模式做成Ap…