init 进程

  • init 进程是所有 Linux 进程的父进程,进程号为 1.

Linux 系统运行中,init 程序是最基本的程序之一。
好的 Linux 发行版通常带有 init 配置,该配置可以适用于绝大多数系统工作,此系统中不需要对 init 做如何处理。
仅在遇到串行终端挂住、拨入调制解调器、或者希望改变缺省的运行级别是才需要关心 init

init 进程的实现

OpenRC:它是一个基于依赖的 init 系统,它用 C 语言和遵循 POSIX 的 shell 写成,这使得它在 BSD 和 Linux 上可以使用。

Systemd:它是一套中央化系统及设置管理程序。包括守护进程,程序库以及应用软件。

Upstart:是一个基于事件的 init 程序,用于代替传统的 init (多种类 Unix 计算机操作系统启动时用于执行任务的程序)。

Sysvinit:是 system V 风格的 init 系统,源于 System V 系列 UNIX,提供比 BSD 风格 init 系统广告的灵活性。是已经风行几十年的 UNIX init 系统,一直被各类 Linux 发行版采用。

Systemd

Systemd 定义

systemd 服务是一种以 .service 结尾的单元(unit)配置文件,用于控制由 Systemd 控制或者监视的进程。用于后台守护精灵(deamon)的形式运行进程。
Systemd 广泛应用于新版本的 RHELSUSE Linux EnterpriseCentOSFedora 和 openSUSE,用于代替就有的服务器 service。

Systemd 常用命令

systemctl command xxx.service

command 可以是:start、stop、enable

  1. systemctl start httpd.service #启动 Apache 服务
  2. systemctl stop httpd.service #停止 Apache 服务
  3. systemctl restart httpd.service #重启 Apache 服务
  4. systemctl enable mariabd.service # 将 MariaDB 服务设置为开机状态

查看系统已有 Systemd 配置文件

Systemd 的配置文件都放置在 /etc/systemd/system 目录下
典型的 systemd 配置文件包含三个单元

  1. [Unit] :此项目与 unit 的解释、执行服务相依赖性有关

    1. Description=OpenBSD Secure Shell serverDocumentat ion=man:sshd(8) man:sshd_ config(5)After=network. target auditd. service
    2. ConditionPathExists=!/etc/ssh/sshd_ not_ to_ be_ run``
  2. [Service] :该项目与实际执行的指令参数有关

    1. EnvironmentFile=- -/etc/default/ssh
    2. ExecStartPre=/usr/sbin/sshd -t
    3. ExecStart=/usr/sbin/sshd -D $SSHD_ OPTSExecReload=/us r/sbin/sshd-tExecReload=/bin/kill -HUP $MAINPIDKillMode=process
    4. Restart=on-failure
    5. RestartPreventExitStatus=255
    6. Typе =notify
    7. Runt imeDirectory=sshd
    8. RuntimeDirectoryMode=0755
  3. [Install] :此项目说明此 unit 要挂载 target 下面 WantedBy=multi -user. targetAlias. Service

Systemd 的 Unit 在 Systemd 中,所有引导过程中 Systemd 要控制的东西都是一个单元。基本的用法:

  • Description:代表了整个单元描述,可根据需要任意填写。
  • Wants:本单元启动了,它“想要”的单元会被启动。但是这个单元启动若不成功,对本单元没有影响。
  • Requires:该单元启动了,则它“需要”的单元也会被启动。它“需要”的单元被停止了,但是这个设定并不能控制启动顺序,因为它“需要”的单元启动也需要时间,若他需要的单元还未完全启动,就开始启动本单元,则本单元也无法启动,故不建议使用该字段。
  • OnFailure:若本单元启动失败了,顺推,启动该单元作为折衷。
  • Before/After :指定启动顺序。

Systemd 的 Service 服务本体,基本用法如下:

  • Type:服务的类型,各种类型去呗如下:simple:默认,最简单的服务类型。说启动的程序就是说启动的就是主体程序,这个程序要是退出那么一切皆无。
  • forking:标准 Unix Daemon 使用的启动方式。

启动程序后会调用 fork0 函数,把必要的通信频道都设置好后父进程退出,留下守护精灵的子进程。

  • oneshot:适用于那些被一次性执行的任务或者命令,它运行完成后就消失。因为这类服务运行完成就没有任何痕迹,我们经常会需要使用 RemainAfterExit = yes。即使没有进程存在,Systemd 也认为该服务启动成功了。

同时只有这种类型支持多条命令,命令之间用 “ ; ”分割,如需要换行使用“ \ ”

  • dbus:这个程序启动时需要获取一块 DBus 空间,所以需要和 BusName = 一起用。只有它成功获得了 DBus 空间,依赖他的程序才会被启动。
  • ExecStart:在输入的命令是 start 时候执行的命令,这里启动的程序必须使用绝对路径。如必须使用 /sbin/arp 而不能简单的以环境变量直接使用 arp。
  • ExeStop:在输入命令是 stop 时候执行的命令,要求同上。ExecReload:这个不是必须,如果不写则 Service 就不支持 restart 命令。ExeStart 和 ExecStop 是必须要有的。

Systemd 的 Install
服务编写完后还需要被 systemd 装在定义安装各个单元各个字段:

  • WantedBy:设置服务被谁装载,一般设置为multi-user.target。
  • Alias:为 service 设置一个别名,可以使用多个名字来操作服务。
  • Also:在安装这个服务器是还需要的其他服务

    编写一个简单的 Systemd 配置文件

    Alibaba Cloud Linux Linux 系统管理 - 图1
    Alibaba Cloud Linux Linux 系统管理 - 图2

  • Unit 部分

something 代表任何事物,任何内容,Wants 是服务启动成功时检查有遗漏启动,After 是指网络启动成功后执行。

  • Service 部分

type 这个命令的执行完成,退出也认为服务是正常的,以及配置这个 remainafterexit,表示即建成退出也表示可以继续运行,另外两个就是最核心的 execstart 和 execstop 表示在启动的时候会执行 touch、tmp。

  • Install 部分

Wantby 表示服务挂载载mulyi-user.target

crontab

crontab 基本介绍

crontab 是用来定期执行程序的命令,当安装完成操作系统后,默认便会启动此任务调度命令。
Crond 命令会子啊后台每分钟定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

常用命令

  1. crontab-l:列出当前的日程表
  2. crontab-e:编辑当前的日程表
  3. crontab-r:删除当前日程表
  4. crontab-u xx -l:列出 xx 用户的日程表

    crontab 语法

    crontab 作为一个定时任务调度程序,就存在定时任务调度语法,实际使用过程中,语法是以定义分钟、小一个月中的几天、月份、星期,并且附上对应的命令(program)来完成对应对的定义。
    若在分钟中定义的是 0,在小时中定义的是 0,在一个月中的第几天定义的是 1,在月份中也是定义 1,在星期中定义 * (代表所有可能的值),最后输入一个 echo hello ,代表着在 1 月份的 0 时 0 分 去执行 echo hello。

    常用语法

  5. 星号( * ):代表所有可能的值,例如 mouth 字段带星号,则表示在满足其他字段的执行该命令操作。

  6. 都好( , ): 可以用逗号隔开的值指定一个范围的列表。
  7. 中杠( - ):可以用整数之间的中杠表示一个整数范围。
  8. 正斜线( / ):可以用正斜线指定时间间隔的间隔频率。例如“2-6/2 ”表示每两个小时执行一次。同时正斜线可以和星号一起使用,例如用 */10 ,表示 minute 字段,表示每十分钟执行一次。

    实际使用中编辑 crontab

    登陆后,看不见 crontab 列表,执行 crontab-l 来查看调度表,此时显示当前用户没有 crontab 任务,使用 crontab-e 进入编辑模式,当定义任务时,使用 * 表示任意时间任意……,五个星号表示任意时间都要执行。然后执行命令:echo”123/r/n” >> /tmp/crontabtest (输出 tmp 目录下的crontabltest 文件),然后保存并且退出,此时会在 tmp 目录下出现一个对应的生成文件,这是可以使用 crontab-l 查看我们的服务。
    实际使用时,可以根据需要调整实际效果,或着使用 ls/tmp ,目前目录未使用定时任务,此时可以使用 systemctl statsus crond.service,可以看到服务器的运行状况,重启服务之后,看 tmp 目录,就可以看到 crontabtest。
    查看 crontabtest 文件,显示刚刚输入的信息,此时 crontab 就已经执行成功,在输入 crontab-l 显示命令。用 crontab-r 清空,重新输入 crontab-l,发现任务已经被清除。

crontab 常用工具

使用 crontab guru 工具快速理解 crontab 的语法。

crontab 规避

  1. 新建 cron 任务不会马上执行,至少需要两分钟。也可以重启 cron 马上执行。
  2. crontab 命令需要写成绝对路径

    crontab 有一个加载机会,编写的命令需要加载到 crontab 的整个进程当中,需要等下一次执行的时候才能加载进去。 绝对路径是因为 crontab 有自己的用户信息,与所配置的用户信息不符合,就会无法执行,所以写成绝对路径,确保命令可以被执行。

Supervisord

Supervisord

Supervisord 是用 Python 开发的一套通用的进程管理系统,就能一个普通命令进程变为后台 daemon,并且监控进程状态,异常退出时可以正常自动启动。
Supervisord 可以很方便的管理批量进程,不仅仅支持启动、重启、关闭、重载,还要支持监控进程,进程意外僵死后可以自动拉起,确保服务可以正常运行。

Supervisord 安装

yum install supervisord 安装 Supervisord
echosupervisord conf > /etc/supervisord. conf 生成 Supervisord 的配置文件
supervisird -c /etc/supervisord. conf 启动 Supervisord
启动成功后即可执行 Supervisord 的命令。

Supervisord 配置管理

Supervisord 的进程配置文件放置在 /etc/supervisord. conf:
[program:echo_hi]
command=echo hi >> /tmp/hi
autostart=true #是否自动启动
autorestart=true #是否可以重启动
startsecs=10 # 启动时长
starteries=3 #启动失败重试次数
exitcodes=0,2 #退出的代码
stopsignal=QUIT #退出时的信号
stopwaitsecs=10 #停止执行时的命令
log_stdout=true #是否记录标准输出
log_stderr=true #是否记录标准报错

  1. logfile=/tep/show_hi.log #日志记录路径为show_hi.log
  2. logfile=maxbytes=1MB #最大大小为1M
  3. logfile=backups=10 #备份最多保存10天
  4. stdout_logfile_maxbytes=20MB #标准输出大小为20M
  5. stdout_logfile=/tmp/echo_hi. stdout.log #路径为echo_hi.stdout.log

真机查看 Supervisord

cat supervisord.conf 查看 Supervisord 配置文件
b687ba8b35464fdaa90af9238abbd278.png
unix_http_server 是 Supervisord 提供的 unix 接口,可以通过这个接口对它执行操作。
若想自己编写程序控制 Supervisord,就可以通过接口文件来就行连接。
52be870a-79f5-4461-95fd-075ff5ece9de.png
也可以用 http 连接
2efd1570814e42d1b10f9e1817cdf992.png
在未完全开启,后续大规模控制时可以通过在集群上配置 Supervisord 的 server 来完成具体的配置。
Supervisord 的具体控制
74359441e91d4b10b8e14c1d4c069ef8.png
f5248c67850947dea3f9288cb45273a8.png
program 部分决定命令属性,包含命令、进程名、启动多少个进程、执行目录、默认的umask、优先级、是否需要自动重启、是否需要自动启动、启动时是否需要等待和重试、退出代码等
日志标准输出位置:
b04105fb3a834b23ad0bb0666664ce9d.png
错误输出位置;
5739e9dd56334b0894c704a9fdbf41b9.png
关键 :
Environment 设定环境变量,可以设定多个环境变量