源码安装,系统服务

获取源码途径

[官网]
(www.nginx.org
)

配置环境

先安装一个工具包

yum  -y  groupinstall  "Development Tools

可以安装nginx

yum -y install  wget
wget 浏览器中所下载.gz的包
md5sum 压缩包.tgz       //校验得到的包
tar -xf nginx.tar.gz -C /usr/local/src
cd /usr/local/src/nginx-1.16.0

然后依赖包的安装

yum -y install zlib-devel
yum -y install openssl-devel
yum -y install gcc gcc-c++
yum -y install pcre-devel
然后进行配置
./configure \  (续行符)
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_ssl_module \
--with-pcre

./configure --prefix=/usr/local/nginx
再进行编译 
make
make -j cpu核心数    //可以编译得快一点
最后进行安装
make install

系统服务

[闫哥]
https://app.yinxiang.com/fx/6db811cf-63c3-46e6-93cb-01f8c82c24ae

先编辑一个a.sh的小程序

while true
do
   echo "$(date +%s) I love her" >> /root/bin/love.txt
   sleep 3
done

命令 选项 参数
sh a.sh &

sh运行这个程序,&相当于把这个程序放到后台去执行,与 ctrl + z 相反,(ctrl+z是把程序放到后台并且停止)

jobs -l 显示当前进程号与工作号

echo && 显示当前-bash的进程号

fg %工作号 就是可以把后台的工作任务调到前台继续运行

bg %工作号 会让后台处于停止状态的任务(进程) 继续运行于后台

daemon 守护进程

计算机想要提供一些功能给用户使用,需要一个程序,并把进程运行起来。
之前说过,程序运行起来就是进程了,进程都有生命周期的。
运行 等待 休眠 结束
计算机提供的某一项功能需要长期的运行,就像一个网站,你什么时间访问他,都会得到响应
这样就需要把提供这类功能的进程长期的放在内存中,不让他结束。
这类的进程通常成为服务,那谁来管理这些进程呢?就是控制这些服务进程的启动、重启、停止。
就是叫守护进程的进程, 在 CentOS7 中是 systemd, CentOS5/6 是 init。
也可以说服务 service 通常都是以守护进程的方式启动的,都是在后台运行的。

早期的 System V

服务的启动、关闭与观察等方式:
服务启动脚本通通放置于 /etc/init.d/ 下,都是 bash shell script 脚本程序。

启动:/etc/init.d/daemon start>
关闭:/etc/init.d/daemon stop
重新启动:/etc/init.d/daemon restart
查看状态:/etc/init.d/daemon status

CentOS7当前的 systemd

并行启动服务

旧的 init 启动脚本是一项一项任务依序启动的模式,因此没有依赖关系的服务也是得要一个一个的启动的。目前我们的硬件主机系统与操作系统几乎都支持多核心架构了,所以应该支持并行启动。systemd 就是可以让所有的服务同时启动。

请求得到立刻回复

systemd 由于常驻内存,因此任何要求 (on-demand) 都可以立即处理后续的 daemon 启动的任务.

服务相依性的自我检查

例如,你部署了 FTP 服务,并且明确配置了它要依赖于 network (网络) 服务,但是你的 network 服务并没有启动,此时,你要启动 FTP 服务,systemd 会帮你启动 network 服务。

依 daemon 功能分类

systemd 将服务单位 (unit) 区分为 service, socket, target, path, snapshot, timer 等多种不同的类型(type), 方便系统管理员分类与记忆。

向下相容旧有的 init 服务脚本

基本上, systemd 是可以相容于 init 的启动脚本的,因此,旧的 init 启动脚本也能够通过 systemd 来管理,只是更进阶的 systemd 功能就没有办法支持了。

多个 daemons 集合成为一个群组 target

systemd 的配置文件放置目录

systemd 将过去所谓的 daemon 执行脚本通通称为一个服务单位 (unit),而每种服务单位依据功能来区分时,就分类为不同的类型 (type)。

配置文件都放在下面的路径中

/usr/lib/systemd/system/

每个服务最主要的启动脚本设置,有点类似以前的 /etc/init.d 下面的文件;

/run/systemd/system/

系统执行过程中所产生的服务脚本,这些脚本的优先序要比 /usr/lib/systemd/system/ 高!

/etc/systemd/system/

管理员依据主机系统的需求所创建的执行脚本,其实这个目录有点像以前 /etc/rc.d/rc5.d/Sxx 之类的功能!执行优先序又比 /run/systemd/system/ 高!

而实际执行的 systemd 启动脚本配置文件, 其实都是放置在 /usr/lib/systemd/system/ 下面。
因此如果你想要修改某个服务启动的设置,应该要去 /usr/lib/systemd/system/ 下面修改才对!

systemd 的 unit 类型分类说明

一个服务执行的脚本就成为一个 unit (服务单位)
通过扩展名区分 unit 的类型

.service 一般服务类型 (service unit)

主要是系统服务,包括服务器本身所需要的本机服务以及网络服务都是!比较经常被使用到的服务大多是这种类型! 所以,这也是最常见的类型了!

.socket 内部程序数据交换的 socket 服务 (socket unit)

主要是 IPC (Inter-process communication) 的传输讯息 socket file 功能。 一般用于本机服务比较多,例如我们的图形界面很多的软件都是通过 socket 来进行本机程序数据交换的行为。

.target 执行环境类型 (target unit)

其实是一群 unit 的集合,例如 multi-user.target 其实就是一堆服务的集合~也就是说, 选择执行 multi-user.target 就是执行一堆其他 .service 或/及 .socket 之类的服务!

.mount .automount 文件系统挂载相关的服务 (automount unit / mount unit)

例如来自网络的自动挂载、NFS 文件系统挂载等与文件系统相关性较高的程序管理。

.path 侦测特定文件或目录类型 (path unit)

某些服务需要侦测某些特定的目录来提供队列服务,例如最常见的打印服务,就是通过侦测打印队列目录来启动打印功能! 这时就得要 .path 的服务类型支持了!

.timer 循环执行的服务 (timer unit)

这个东西有点类似 anacrontab 喔!不过是由 systemd 主动提供的,比 anacrontab 更加有弹性!

通过 systemctl 管理服务

status    :查看这个 unit 的状态!
start     :立刻启动
stop      :立刻停止
restart   :先执行 stop 再执行 start 的意思

enable    :设置下次开机时,启动后面接的 unit 
disable   :设置下次开机时,不启动后面接的 unit

reload    :不关闭后面接的 unit 的情况下,重新载入配置文件,让设置生效
systemctl daemon-reload     :清除缓存重新载入

例子

查看 atd.server 的状态
[root@shark ~]# systemctl status atd.service
● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 一 2019-07-29 23:31:09 CST; 1s ago
  Process: 1162 ExecStart=/usr/sbin/atd -f $OPTS (code=exited, status=0/SUCCESS)
 Main PID: 1162 (code=exited, status=0/SUCCESS)
关键的是第二行和第三行
第二行中的 enabled 表示下次开机,会自动启动此服务。
第三行中的 loaded(running) 表示目前是运行状态
如果为这个  inactive (dead) 表示目前没有运行

关于 Active 的状态:
active (running):正在运行
active (exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。 举例来说,开机或者是挂载时才会进行一次的 quotaon 功能,就是这种模式!(无须常驻内存)。
active (waiting):正在执行当中,不过还再等待其他的事件才能继续处理。举例来说,打印的队列相关服务就是这种状态!
inactive:这个服务目前没有运行的意思。
关于daemon (服务) 的默认状态
enabled:这个 daemon 将在开机时被执行
disabled:这个 daemon 在开机时不会被执行
mask:这个 daemon 无论如何都无法被启动!因为已经被强制注销 (非删除)。可通过 systemctl unmask 方式改回原本状态
static:这个 daemon 不可以自己启动 (enable 不可),不过可能会被其他的 enabled 的服务来唤醒 (相依属性的服务)

强制注销

被注销的服务是服务再次启动的
别担心,可以使用 unmask 取消注销

命令
systemctl status cups

输出
● cups.service
   Loaded: masked (/dev/null; bad)  # 注意这里
   Active: inactive (dead)
 systemctl unmask cups.service
systemctl restart cups.service

通过 systemctl 管理不同的操作环境 (target unit)

几个比较重要的 target unit

graphical.target
就是文字加上图形界面,这个项目已经包含了下面的 multi-user.target 项目!

multi-user.target
纯文本模式!

rescue.target
救援模式!在无法使用 root 登陆的情况下,systemd 在开机时会多加一个额外的暂时系统,与你原本的系统无关。这时你可以取得 root 的权限来维护你的系统。 但是这是额外系统,因此可能需要动到 chroot 的方式来取得你原有的系统!自修

emergency.target
紧急处理系统的错误,还是需要使用 root 登陆的情况,在无法使用 rescue.target 时,可以尝试使用这种模式!

shutdown.target
就是关机的流程。

getty.target
可以设置你需要几个 tty 之类的,如果想要降低 tty 的数量,可以修改这个东西的配置文件!

查看当前模式和修改默认模式

systemctl [command] [unit.target]
command:
    get-default :查看默认的 target 
    set-default :设置后面接的 target 成为默认的模式
    isolate     :切换到后面接的模式

例子

[root@shark ~]# systemctl get-default
graphical.target
[root@shark ~]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
[root@shark ~]# systemctl get-default
multi-user.target

在不重新开机的情况下,将目前的操作环境改为纯文本模式,关掉图形界面

systemctl isolate multi-user.target

系统服务和端口

head  -50   /etc/services

添加自定义服务到 systemd

示例
下面的示例是,写一个 shell 脚本,之后让 systemd 去管理这个脚本程序。
编写脚本和环境文件
在自己用户的家目录下的 bin 目录下编写脚本 love.sh , 写入下面的内容

while true
do
   echo "$(date +%s) I love her" >> /root/bin/love.txt
   echo "$(date +%s) ${name} love her" >> /root/bin/love.txt
   sleep 3
done

脚本的意思是
每 3 秒钟向 /root/bin/love.txt 文件中写上两句话
注意 ${name} 是一个配置文件的中变量

[Unit]
Description=Love server daemon

[Service]
Type=simple
ExecStart=/bin/bash /root/bin/love.sh
ExecStop=/bin/kill -9 $(ps -ef |grep '[a].sh' |awk '{print $2}')
EnvironmentFile=/root/bin/love.conf

[Install]
WantedBy=multi-user.target

控制服务启停

systemctl daemon-reload   // 程序加载 让 systemd 加载 love.service 服务
systemctl start love.service   // 启动
systemctl status love.service   // 查看状态

证程序的执行结果, 持续观察 /root/bin/love.txt 文件,看有没有被持续写入内容,并且观察变量有没有生效。

tail   -f    /root/bin/love.txt
输出
1564567167 I love her
1564567167 shark-user love her
1564567170 I love her
1564567170 shark-user love her
1564567173 I love her
1564567173 shark-user love her
1564567176 I love her
1564567176 shark-user love her
1564567179 I love her
1564567179 shark-user love her

实例二,将nginx添加到服务中去

1.先yum下载好nginx

2.进入到这个目录下写入服务文件
vim /etc/systemd/system/nginx.service

  1 [Unit]
  2 Description=nginx
  3 
  4 
  5 [Service]
  6 Type=forking
  7 ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  8 ExecStop=/usr/local/nginx/sbin/nginx -s stop
  9 
 10 [Install]
 11 WantedBy=multi-user.target  

3.可以用systemctl start nginx.service

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • 源码安装 以Nginx为例:1.准备编译环境 2.解决软件自身依赖 3.下载并解压 4.进行配置 5.编译安装 6...
  • 系统服务 老师笔记另一个 一、后台任务 & 先说工作任务Ctrl+z 可以把一个前台运行的程序放在后台,且停止工作...
    霓旸芊芊阅读 536评论 0 0
  • 最近在研究Docker的源码.读到ApiServer的启动过程时,发现其有一个新的概念,叫做service act...
    AlstonWilliams阅读 1,122评论 1 4
  • cenos6启动流程 加载BIOS的硬件信息,获取第一个启动设备 读取第一个启动设备MBR的引导加载程序(grub...
    毛利卷卷发阅读 1,034评论 0 1
  • 转:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial...
    right_33cb阅读 915评论 0 0