解密dispatch linux:Linux系统中的进程调度机制 (dispatch linux)

随着计算机技术的发展,操作系统也随之发展,Linux系统作为一种流行的操作系统之一,它的进程调度机制在操作系统中占据着重要的地位。本文将从以下几个方面分析解密Linux系统中的进程调度机制——

一、进程调度机制的概述

进程调度机制是操作系统中非常重要的一个组成部分,针对不同类型的进程进行优先级排序并进行调度,保证各个进程的运行过程可以有序地进行、不会互相影响。Linux系统中的进程调度机制根据进程的优先级、时间片以及进程的状态进行智能调度。

二、进程的优先级

在Linux系统中,每个进程都有不同的优先级,优先级越高的进程,执行就越优先,不论是在等待CPU资源时还是在竞争进程资源时。Linux系统中,优先级通常被赋予一个1到140的值,其中1为更高,140为更低。在任何给定的时刻,内核都会选择优先级更高的就绪进程来占用CPU,如果两个进程的优先级相同,那么将通过Round Robin查询程序(RR)规则来确定进程的程序选择顺序。

三、时间片

在Linux系统中,每个进程都有所谓的时间片(time quantum)来执行。进程的时间片定义了一个时间段,在这个时间段内进程可以使用CPU资源。当CPU分配给一个进程时,该进程就开始使用其时间片,如果该进程时间片用完了,那么CPU就会分配给另一个进程使用。这个时间片的大小是由操作系统内核所定义的,可根据需要设置时间片大小来改变系统的执行策略。

四、进程状态

Linux系统中的进程具有不同的状态。操作系统内核会根据不同的状态来对进程进行调度,以便在不同的情况下优化运行。Linux中有五种进程状态,分别是:运行、等待、中断、休眠、停止,根据进程当前状态的不同,内核会调用相应的函数来改变进程状态。

五、调度器

Linux操作系统中,不同的进程调度器(scheduler)占据着不同的地位。常见的调度器包括CFS(Completely Fr Scheduler)、Deadline Scheduler、O(1) Scheduler等,它们会根据不同的进程状态和需求选择不同的进程调度策略。进程调度策略是一种有优先级的脚本,它决定了整个系统中每个进程所拥有的时间片大小、进程调度频率和进程优先级等。这些数据是由内核通过复杂的算法来计算的,以确保整个系统都能够高效地运行。

六、

综上所述,Linux操作系统中的进程调度机制是整个系统中非常核心的一部分,它通过对不同进程的优先级、时间片、状态以及调度器进行智能调度,保证整个系统能够高效运行。通过本文的解析,读者可以更好地了解Linux系统中的进程调度机制,从而更好地理解操作系统的工作原理。

相关问题拓展阅读:

【求助】linux下的C语言多线程,怎样监视键盘上的输入?

发所用语言为C..

一般的..要想学好嵌入式开发..就要两个都会..

如果只学linux,这个只是为以后从事linux服务器搭建,管理和维护等..差不多就是跟硬件打交道..

而嵌入式开发就相当于..在windows下用C,C++,C#,java等开发一样..只不过他的开发平台换成了linux…

如果想自学建议按照以下步骤:

学习步骤如下:

1、Linux 基础

安装Linux操作系统

Linux文件系统

Linux常用命令

Linux启动过程详解

熟悉Linux服务能够独立安装Linux操作系培悔陪统

能够熟练使用Linux系统的基本命令

认识Linux系统的常用服务安装Linux操作系统

Linux基本命令实践

设置Linux环境变量

定制Linux的服务 Shell 编程基础使用vi编辑文件

使用Emacs编辑文件

使用其他编辑器

2、Shell 编程基础

Shell简介

认识后台程序

Bash编程熟悉Linux系统下的编辑环境

熟悉Linux下的各种Shell

熟练进行shell编程熟悉vi基本操作

熟悉Emacs的基本操作

比较不同shell的区别

编写一个测试服务器是否连通的shell脚本程序

编写一个查看进程是否存在的shell脚本程序

编写一个带有循环语句的shell脚本程序

3、Linux 下的 C 编程基础

linux C语言环境概述

Gcc使用方法

Gdb调试技术

Autoconf

Automake

Makefile

代码优化 熟悉Linux系统下的开发环境

熟悉Gcc编译器

熟悉Makefile规则编写Hello,World程序

使用 make命令编译程序

编写带有一个循环的程序

调试一个有问题的程序

4、嵌入式系统开发基础

嵌入式系统概述

交叉编译

配置TFTP服务

配置NFS服务

下载Bootloader和内核

嵌入式Linux应用软件开发流程

熟悉嵌入式系统概念以及开发流程

建立嵌入式系统开发环境制作cross_gcc工具链

编译并下载U-boot

编译并下载Linux内核

编译并下载Linux应用程序

嵌入式系统移植

Linux内核代码

平配蠢台相关代码分析

ARM平台介绍

平台移植的关键技术

移植Linux内核到 ARM平台 了解移植的概念

能够移植Linux内核移植Linux2.6内核到 ARM9开发板

5、嵌入式 Linux 下串口通信

串行I/O的基本概念

嵌入式Linux应用软件开发流程

Linux系统的文件和设备

与文件相关的系统调用

配置超级终端和MiniCOM 能够熟悉进行串口通信

熟悉文件I/O 编写串口通信程序

编写多串口通信程序

6、嵌入式系统中多进程程序设计

Linux系统进程概述

嵌入式系统的进程特点

进程操作

守护进程

相关的系统调用了解Linux系统中进程的概念

能够编写多进程程序编写多进程程序

编写一个守护进程程序

sleep系统调用任务管理、同步与通信 Linux任务概述

任务调度

管道

信号

共享内存

任务管理 API 了解Linux系统任务管理机制

熟悉进程间通信的几种方式

熟悉嵌入式Linux中的任务间同步与通信

编写一个简单的管道程序实现文件传输

编写前薯一个使用共享内存的程序

7、嵌入式系统中多线程程序设计

线程的基础知识

多线程编程方法

线程应用中的同步问题了解线程的概念

能够编写简单的多线程程序编写一个多线程程序

8、嵌入式 Linux 网络编程

网络基础知识

嵌入式Linux中TCP/IP网络结构

socket 编程

常用 API函数

分析Ping命令的实现

基本UDP套接口编程

许可证管理

PPP协议

GPRS 了解嵌入式Linux网络体系结构

能够进行嵌入式Linux环境下的socket 编程

熟悉UDP协议、PPP协议

熟悉GPRS 使用socket 编写代理服务器

使用socket 编写路由器

编写许可证服务器

指出TCP和UDP的优缺点

编写一个web服务器

编写一个运行在 ARM平台的网络播放器

9、GUI 程序开发

GUI基础

嵌入式系统GUI类型

编译QT

进行QT开发熟悉嵌入式系统常用的GUI

能够进行QT编程使用QT编写“Hello,World”程序

调试一个加入信号/槽的实例

通过重载QWidget 类方法处理事件

10、Linux 字符设备驱动程序

设备驱动程序基础知识

Linux系统的模块

字符设备驱动分析

fs_operation结构

加载驱动程序了解设备驱动程序的概念

了解Linux字符设备驱动程序结构

能够编写字符设备驱动程序编写Skull驱动

编写键盘驱动

编写I/O驱动

分析一个看门狗驱动程序

对比Linux2.6内核与2.4内核中字符设备驱动的不同

Linux 块设备驱动程序块设备驱动程序工作原理

典型的块设备驱动程序分析

块设备的读写请求队列了解Linux块设备驱动程序结构

能够编写简单的块设备驱动程序比较字符设备与块设备的异同

编写MMC卡驱动程序

分析一个文件系统

对比Linux2.6内核与2.4内核中块设备驱动的不同

11、文件系统

虚拟文件系统

文件系统的建立

ramfs内存文件系统

proc文件系统

devfs 文件系统

MTD技术简介

MTD块设备初始化

MTD块设备的读写操作了解Linux系统的文件系统

了解嵌入式Linux的文件系统

了解MTD技术

能够编写简单的文件系统为 ARM9开发板添加 MTD支持

移植JFFS2文件系统

通过proc文件系统修改操作系统参数

分析romfs 文件系统源代码

创建一个cramfs 文件系统

望采纳:可是一个字一个字钱敲出来的..

另外,站长团上有产品团购,便宜有保证

在袜冲Microsoft Windows 中,键盘和鼠标是两个标准的用户输入源,在一些交叠的操作中通常相互补充使用。当然,鼠标在今天的应用程序中比10年前使用得更为广泛。甚至在一些应用程序中,我们更习惯于使用鼠标,例如在游戏、画图程序、音乐程序,以及Web创览器等程序中就是这样。然而,我们可以不使用鼠标,但绝对不能从一般的PC中拆掉键盘。

  Windows程序获得键盘输入的方式:键盘输入以消息的形式传递给程序的窗口过程。实际上,之一次学习消息时,键盘就是一个明显的例子:消息应该传递给应用程序的信息类型。

  Windows用8种不同的消息来传递不同的键盘事件。这好像太多了,但是(如野就像我们所看到的一样)程序可以忽略其中至少一半的消息而不会有任何问题。并且,在大多数情况下,这些消息中包含的键盘信息会多于程序所需要的。处理键盘的部分工作就是识别出哪些消息是重要的,哪些是不重要的。

键盘基础知识

  虽然应用程序在很多情况下可以通过鼠标实现信息的输入,但到现在为止键盘仍然是PC机中不可替代的重要输入设备。

  用键盘当作输入设备,每当用户按下或释放某一个键时,会产生一个中断,该中断激活键盘驱动程序KEYBOARD.DRV来对键盘中断进行处理。 KEYBOARD.DRV程序会根据用户的不同操作进行编码,然后调用Windows用户模块USER.EXE生成键盘消息,并将该消息发送到消息队列中等候处理。

1.扫描码和虚拟码

  扫描码对应着键盘上的不同键,每一个键被按下或释放时,都会产生一个唯一的扫描码作为本身的标识。扫描码依赖于具体的硬告橡歼件设备,即当相同的键被按下或释放时,在不同的机器上可能产生不同的扫描码。在程序中通常使用由Windows系统定义的与具体设备无关的虚拟码。在击键产生扫描码的同时,键盘驱动程序KEYBOARD.DRV截取键的扫描码,然后将其翻译成对应的虚拟码,再将扫描码和虚拟码一齐编码形成键盘消息。所以,最后发送到消息队列的键盘消息中,既包含了扫描码又包含了虚拟码。

  经常使用的虚拟码在WINDOWS.H文件中定义,常用虚拟码的数值、常量符号和含义如表所示。

取值(16进制) 常量符号 含义

VK_LBUTTON 鼠标左键

VK_RBUTTON 鼠标右键

VK_CANCEL Break中断键

VK_MBUTTON 鼠标中键

未定义

VK_BACK (BackSpace)键

VK_TAB Tab键

0A-0B — 未定义

0C VK_CLEAR Clear键

0D VK_RETURN Enter键

0E-0F — 未定义

VK_SHIFT Shift键

VK_CONTROL Ctrl键

VK_MENU Alt键

VK_PAUSE Pause键

VK_CAPTIAL CapsLock键

汉字系统保留

1A — 未定义

1B VK_ESCAPE Esc键

1C-1F — 汉字系统保留

VK_SPACE 空格键

VK_PRIOR PageUp键

VK_NEXT PageDown键

VK_END End键

VK_HOME Home键

VK_LEFT ←(Left Arrow)键

VK_UP ↑(Up Arrow)键

VK_RIGHT →(Right Arrow)键

VK_DOWN ↓(Down Arrow)键

VK_SELECT Select键

2A — OEM保留

2B VK_EXECUTE Execute键

2C VK_SNAPSHOT Print Screen键

2D VK_INSERT Insert键

2E VK_DELETE Delete键

2F VK_HELP Help键

VK_0-VK_9 数字键0-9

3A未定义

A VK_A-VK_Z 字母键A-Z

5B-5F — 未定义

VK_NUMPAD0-VK_NUMPAD9 小键盘数字键0-9

6A VK_MULTIP *(乘号)键

6B VK_ADD +(加号)键

6C VK_SEPAPATOR 分隔符键

6E VK_SURACT -(减号)键

6F VK_DECIMAL .(小数点)键

VK_DIVIDE /(除号)键

F VK_F1-VK_F24 F1-F24功能键

VK_NUMBERLOCK Number lock键

VK_SCROLL Scroll lock键

B9 — 未定义

BA-C0 — OEM保留

C1-DA — 未定义

DB_E4 — OEM保留

E5 — 未定义

E6 — OEM保留

E7-E8 — 未定义

E9-F5 — OEM保留

F6-FE — 未定义

2.输入焦点

  同一时刻,Windows中可能有多个不同的程序在运行,也就是说有多个窗口同时存在。这时,键盘由多个窗口共享,但只有一个窗口能够接收到键盘消息,这个能够接收键盘消息的窗口被称为拥有输入焦点的窗口。

  拥有输入焦点的窗口应该是当前的活动窗口,或者是活动窗口的子窗口,其标题和边框会以高亮度显示,以区别于其他窗口。拥有输入焦点的也可以是图标而不是窗口,此时,Windows也将消息发送给图标,只是消息的格式略有不同。

  窗口过程可以通过发送WM_SETFOCUS和 WM_KILLFOCUS消息使窗体获得或失去输入焦点。程序也可以通过捕获WM_SETFOCUS和WM_KILLFOCUS消息来判断窗体何时获得或失去输入焦点。其中WM_SETFOCUS消息表示窗口正获得输入焦点,WM_ KILLFOCUS消息表示窗口正失去输入焦点。

3.键盘消息

  键盘消息分为系统键消息和非系统键消息。系统键消息是指由Aft键和其他键组合而产生的按键消息。当系统键被按下时产生WM_ SYSKEYDOWN消息,当系统键被释放时产生WM_SYSKEYUP消息。 Aft键与其他键形成的组合键通常用于对程序菜单和系统菜单进行选择,或用于在不同的程序之间进行切换。因此,系统键消息应该交由Windows进行处理,用户所编制的程序一般不处理系统键消息,而是将这些消息交由DefWindowProc函数进行处理。如果用户想对系统键消息进行处理,应该在处理完这些消息后,再将其发送给DefWindowProc函数,使得Windows系统能够正常工作。

  某些击键消息可以被转换成字符消息,例如字母键、数字键等。而有些键只能产生按键消息而没有字符消息,例如 Shift键、Insert键等。消息循环中的 TranslateMessage函数可以实现从击键消息向字符消息的转化。当GetMessage函数捕获一个WM_SYSKEYDOWN消息或 WM_KEYDOWN消息后,TranslateMessage函数判断产生该消息的键是否能够被转换成字符消息,如果能,就将该消息转换成字符消息,再通过DispatchMessape函数将转换后的字符消息发送到消息队列中去。字符消息共有以下四种,如表所示。

字符 系统字符 非系统字符

普通字符 WM_SYSCHAR WM_CHAR

死字符 WM_SYSDEADCHAR WM_DEADCHAR

  其中死字符是由某些特殊键盘上的按键所造成的,Windows一般忽略死字符所产生的消息。

  Windows的消息一般是通过一个MSG结构体变量传送给消息处理函数的。对于键盘消息, MSG结构体变量的各个域中较重要的是lParam域和 wParam域。wParam域用于保存按键的虚拟键代码或字符的ASCII码。对于非字符消息,wParam域保存按键的虚拟健代码;对于字符消息, wParam域不保存字符的ASCII码。lParam域则用于保存击键时产生的附加信息,实际上一个32位的lParam变量被分为六部分,记录了以下相关信息:重复次数、OEM扫描码、扩展键标志、关联键标志、前一击键状态和转换状态。lParam域各位的含义如表所示。

位数 含义

击键重复次数累加

OEM扫描码

是否为扩展键

未定义

是否便用关联键,及Alt键是否同时按下。

前一次击键状态,0表示该键前一次状态为抬起,1表示前一次状态为按下

转换状态

  按键的次序不同,产生的消息也不相同。例如,按下并释放1键,读过程依次产生如表所示三条消息。按下1键所产生的消息和wParam的取值

消息 wParam变量取值

WM_KEYDOWN 虚拟码1

WM_CHAR ASCII码“1”

WM_KEYUP 虚拟码1

  如果按下Shift键后再按下1键并释放,则依次产生如表所示的消息。按下 Shift键后按 1健所产生的消息和 wParam的取值

消息 wParam变量取值

WM_KEYDOWN 虚拟码 VK_SHIFT

WM_KEYDOWN 虚拟码 VK_1

WM_CHAR ASCII码 “1”

WM_KEYUP 虚拟码 VK_1

WM_KEYUP 虚拟码 VK_SHIF

键盘应用实例

  下面通过一个应用程序实例来说明在实际编程中如何处理键盘消息。

#include

#include

// 全局变量

RECT rc; //记录滚屏的矩形区域

?

int xChar, yChar; //文本输入点坐标

WNDCLASSEX wnd; //窗口类结构变量

char szAppName = “键盘消息监视程序”; //窗口类名

//函数声明

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

BOOL MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE hInstance,int iCmdShow);

//函数:WinMain

//作用:入口函数

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)

{

  MSG msg;

  if(!MyRegisterClass(hInstance))

  {

return FALSE;

  }

  

if(!InitInstance(hInstance,iCmdShow))

  {

return FALSE;

  }

  

  while (GetMessage (&msg, NULL, 0, 0))

  {

TranslateMessage (&msg);

DispatchMessage (&msg);

  }

  return msg.wParam;

}

//函数:ShowKey

//作用:实现在窗口中显示按键信息

void ShowKey (HWND hwnd, int iType,char *szMessage,WPARAM wParam,LPARAM lParam)

{

  static char *szFormat ={“%-14s %3d %c %6u %4d %5s %5s %6s %6s”,

      ”%-14s %3d %c %6u %4d %5s %5s %6s %6s” };

  char szBuffer;

  HDC hdc;

  ScrollWindowEx(hwnd, 0, -yChar, &rc,&rc,NULL,NULL,SW_INVALIDATE);

  hdc = GetDC (hwnd);

  SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT));

  TextOut (hdc,

xChar,

rc.bottom – yChar,

szBuffer,

wsprintf szBuffer,

szFormat,

szMessage, //消息

wParam, //虚拟键代码

(BYTE) (iType ? wParam :‘ ’),//显示字符值

LOWORD (lParam), // 重复次数

HIWORD (lParam) & 0xFF, // OEM键盘扫描码

//判断是否为增强键盘的扩展键

(PSTR) (0x& lParam ? “是” : “否”),

//判断是否同时使用了ALT键

(PSTR) (0x& lParam ? “是” : “否”),

(PSTR) (0x& lParam ? “按下” : “抬”),

//判断前一次击键状

(PSTR)(0x& lParam ? “按下” : “抬起”))

//判断转换状态?

);

  ReleaseDC (hwnd, hdc); ?

  ValidateRect (hwnd, NULL); ?

}

//函数:WndProc

//作用:处理主窗口的消息

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

{

  static char szTop =”消息键 字符 重复数 扫描码 扩展码 ALT 前一状态 转换状态”;

  static char szUnd =”_______ __ ____ _____ ______ ______ ___ _______ ______”;

  //在窗口中输出文字作为信息标题

  HDC hdc;

  PAINTSTRUCT ps;

  TEXTMETRIC tm;

  switch (iMsg)

  {

case

hdc = GetDC (hwnd); //设定字体

SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)); //检取当前字体的度量数据

GetTextMetrics (hdc, &tm);

xChar = tm.tmAveCharWidth;//保存字体平均宽度

yChar = tm.tmHeight; //保存字体高度

ReleaseDC (hwnd, hdc);

rc.top = 3 * yChar / 2;

return 0;

case

//窗体改变后保存新的滚屏区域右下角坐标

rc.right = LOWORD (lParam);

rc.bottom = HIWORD (lParam);

UpdateWindow (hwnd);

return 0;

case WM_PAINT: //处理窗口重绘消息

InvalidateRect (hwnd, NULL, TRUE);

hdc = BeginPaint (hwnd, &ps);

SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;

SetBkMode (hdc, TRANSPARENT) ;

TextOut (hdc, xChar, yChar / 2, szTop, (sizeof szTop) – 1) ;

TextOut (hdc, xChar, yChar / 2, szUnd, (sizeof szUnd) – 1) ;

EndPaint (hwnd, &ps);

return 0;

case WM_KEYDOWN:

//处理键盘上某一键按下的消息

ShowKey (hwnd, 0, “WM_KEYDOWN”,wParam, lParam);

return 0;

case WM_KEYUP:

//处理键盘上某一按下键被释放的消息

ShowKey (hwnd, 0, “WM_KEYUP”, wParam, lParam);

return 0;

case WM_CHAR:

//处理击键过程中产生的非系统键的可见字符消息

howKey (hwnd, 1, “WM_CHAR”, wParam, lParam);

return 0;

case WM_DEADCHAR:

//处理击键过程中产生的非系统键”死字符”消息

ShowKey (hwnd, 1, “WM_DEADCHAR”, wParam, lParam);

return 0;

case WM_SYSKEYDOWN:

//处理系统键按下的消息

ShowKey (hwnd, 0, “WM_SYSKEYDOWN”,wParam, lParam);

break;

case WM_SYSKEYUP:

//处理系统键抬起的消息

ShowKey (hwnd, 0, “WM_SYSKEYUP”, wParam, lParam);

break;

case

ShowKey (hwnd, 1, “WM_SYSCHAR”, wParam, lParam);

break;

case

ShowKey (hwnd, 1, “WM_SYSDEADCHAR”, wParam, lParam);

break;

case WM_DESTROY:

//处理结束应用程序的消息

PostQuitMessage (0);

return 0;

  }

  return DefWindowProc (hwnd, iMsg, wParam, lParam);

}

//函数:MyRegisterClass

//作用:注册窗口类

BOOL MyRegisterClass(HINSTANCE hInstance)

{

  wnd.cbSize= sizeof (wnd);

  wnd.style = CS_HREDRAW | CS_VREDRAW;

  wnd.lpfnWndProc = WndProc;

  wnd.cbClsExtra = 0;

  wnd.cbWndExtra = 0;

  wnd.hInstance = hInstance;

  wnd.hIcon = LoadIcon (NULL, IDI_APPLICATION);?

  wnd.hCursor = LoadCursor (NULL, IDC_ARROW);

  wnd.hbrBackground = (HBRUSH)

  GetStockObject (WHITE_BRUSH);

  wnd.lpszMenuName = NULL;

  wnd.lpszClassName = szAppName;

  wnd.hIconSm = LoadIcon (NULL, IDI_APPLICATION);

  return RegisterClassEx (&wnd);

}

//函数:InitInstance

//作用:创建主窗口

BOOL InitInstance(HINSTANCE hInstance,int iCmdShow)

{

  HWND hwnd;

  hwnd = CreateWindow (szAppName,

   “键盘消息监视程序”,

   WS_OVERLAPPEDWINDOW,

   CW_USEDEFAULT,CW_USEDEFAULT,

   CW_USEDEFAULT,CW_USEDEFAULT,

   NULL,NULL,hInstance,NULL

   );

  if(!hwnd)

  {

return FALSE;

  }

  ShowWindow (hwnd, iCmdShow);

  UpdateWindow (hwnd);

  return TRUE;

linux怎么安装rabbitmq

RabbitMQ 安装

# Install from EPEL

# yum –enablerepo=epel -y install rabbitmq-server

# systemctl start rabbitmq-server

# journalctl -xe

Nov 12 01:30:01 vdevops.org CROND: (root) CMD (/usr/lib64/sa/sa1 1 1)

Nov 12 01:30:04 vdevops.org rabbitmqctl: DIAGNOSTICS

Nov 12 01:30:04 vdevops.org rabbitmqctl: ===========

Nov 12 01:30:04 vdevops.org rabbitmqctl: attempted to contact:

Nov 12 01:30:04 vdevops.org rabbitmqctl: rabbit@vdevops:

Nov 12 01:30:04 vdevops.org rabbitmqctl: * unable to connect to epmd (port 4369) on vdevops: timeout (timed out)

Nov 12 01:30:04 vdevops.org rabbitmqctl: current node details:

Nov 12 01:30:04 vdevops.org rabbitmqctl: – node name: rabbitmqctl3831@vdevops

Nov 12 01:30:04 vdevops.org rabbitmqctl: – home dir: /var/lib/rabbitmq

Nov 12 01:30:04 vdevops.org rabbitmqctl: – cookie hash: s++dDMtIhAufFItw+ercBw==

Nov 12 01:30:04 vdevops.org polkitd: Unregistered Authentication Agent for unix-process:3798:36632 (system bus name :1.23, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected f

Nov 12 01:30:04 vdevops.org systemd: rabbitmq-server.service: control process exited, code=exited status=2

Nov 12 01:30:04 vdevops.org systemd: Failed to start RabbitMQ broker.

— Subject: Unit rabbitmq-server.service has failed

— Defined-By: systemd

— Support:

— Unit rabbitmq-server.service has failed.

— The result is failed.

Nov 12 01:30:04 vdevops.org systemd: Unit rabbitmq-server.service entered failed state.

Nov 12 01:30:04 vdevops.org systemd: rabbitmq-server.service failed.

Nov 12 01:30:42 vdevops.org systemd: Got automount request for /proc/sys/fs/binfmt_misc, triggered by 3860 (find)

Nov 12 01:30:42 vdevops.org systemd: Mounting Arbitrary Executable File Formats File System…

— Subject: Unit proc-sys-fs-binfmt_misc.mount has begun start-up

— Defined-By: systemd

— Support:

— Unit proc-sys-fs-binfmt_misc.mount has begun starting up.

Nov 12 01:30:42 vdevops.org systemd: Mounted Arbitrary Executable File Formats File System.

— Subject: Unit proc-sys-fs-binfmt_misc.mount has finished start-up

— Defined-By: systemd

— Support:

— Unit proc-sys-fs-binfmt_misc.mount has finished starting up.

— The start-up result is done.

rabbitmq-server启动报错:Failed to start RabbitMQ broker

度娘解析:主机hostname配置错误,原本hostname为vdevops.org,更改为vdevops,修改hosts文件中hostname设置

# hostnamectl set-hostname vdevops # hostname更改重启启动rabbitmq-server

# systemctl status rabbitmq-server

● rabbitmq-server.service – RabbitMQ broker

Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)

Active: active (running) since Sat:32:41 CST; 3min 58s ago

Process: 3831 ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl stop (code=exited, status=2)

Main PID: 3891 (beam)

CGroup: /system.slice/rabbitmq-server.service

├─3891 /usr/lib64/erlang/erts-5.10.4/bin/beam -W w -K true -A30 -Proot /usr/lib64/erlang -progname erl — -home /var/lib/rabbitmq — -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/in/../ebin -nos…

├─3908 /usr/lib64/erlang/erts-5.10.4/bin/epmd -daemon

├─3963 inet_gethost 4

└─3964 inet_gethost 4

Nov 12 01:32:39 vdevops systemd: Starting RabbitMQ broker…

Nov 12 01:32:39 vdevops systemd: rabbitmq-server.service: Got notification message from PID 3908, but reception only permitted for main PID 3891

Nov 12 01:32:40 vdevops rabbitmq-server: RabbitMQ 3.3.5. Copyright (C)GoPivotal, Inc.

Nov 12 01:32:40 vdevops rabbitmq-server: ## ## Licensed under the MPL. See

Nov 12 01:32:40 vdevops rabbitmq-server: ## ##

Nov 12 01:32:40 vdevops rabbitmq-server: ########## Logs:

Nov 12 01:32:40 vdevops rabbitmq-server: ###### ##

Nov 12 01:32:40 vdevops rabbitmq-server: ##########

Nov 12 01:32:41 vdevops systemd: Started RabbitMQ broker.

Nov 12 01:32:41 vdevops rabbitmq-server: Starting broker… completed with 0 plugins.

# systemctl enable rabbitmq-server

Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.

防火墙设置

# firewall-cmd –add-port=5672/tcp –permanent

success

# firewall-cmd –reload

success

要使用RabbitMQ,请先添加用户

# rabbitmqctl add_user linuxprobe password

Creating user “linuxprobe” …

…done.

# rabbitmqctl list_users

Listing users …

guest

linuxprobe

…done.

# granting admin role to a user is like follows

# rabbitmqctl change_password linuxprobe strongpassword

Changing password for user “linuxprobe” …

…done.

# granting admin role to a user is like follows

# rabbitmqctl set_user_tags linuxprobe administrator

Setting tags for user “linuxprobe” to …

…done.

# deleting a user is like follows

# rabbitmqctl delete_user linuxprobe

Deleting user “linuxprobe ” …

…done.

要使用RabbitMQ,也要添加虚拟主机

# rabbitmqctl add_vhost /my_vhost

Creating vhost “/my_vhost” …

…done.

# rabbitmqctl list_vhosts

Listing vhosts …

/

/my_vhost

…done.

# rabbitmqctl delete_vhost /my_vhost

Deleting vhost “/my_vhost” …

…done.

给虚拟主机的用户授予权限,请如下配置

# rabbitmqctl set_permissions

# rabbitmqctl set_permissions -p /my_vhost linuxprobe “.*” “.*” “.*”

Setting permissions for user “linuxprobe” in vhost “/my_vhost” …

…done.

#

# rabbitmqctl list_user_permissions linuxprobe

Listing permissions for user “linuxprobe” …

/my_vhost .* .* .*

…done.

# deleting permission of a specific user is like follows

# rabbitmqctl clear_permissions -p /my_vhost linuxprobe

Clearing permissions for user “linuxprobe” in vhost “/my_vhost” …

…done.

RabbitMQ:使用Web UI

# rabbitmq-plugins enable rabbitmq_management

The following plugins have been enabled:

mochiweb

webmachine

rabbitmq_web_dispatch

amqp_client

rabbitmq_management_agent

rabbitmq_management

Plugin configuration has changed. Restart RabbitMQ for changes to take effect.

# systemctl restart rabbitmq-server

客户端访问

rabbitmqadmin使用

可以配置RabbitMQ使用rabbitmqadmin命

在Web UI上下载rabbitmqadmin。 登录到Web UI并移动到“http://(主机名或IP地址):15672 /

cli”,然后显示以下屏幕,您可以在这里下载rabbitmqadmin,点击here右键保存rabbitmqadmin.txt,然后上传到服务器上面更改为rabbitmqadmin,并添加执行权限

将rabbitmqadmin上传到RabbitMQ服务器并设置合适的权限,此示例显示如下设置

# ll /usr/local/bin/rabbitmqadmin

-rwxr-xr-x. 1 root rootNov 11 17:23 /usr/local/bin/rabbitmqadmin

# rabbitmqadmin list users

++–+-+

| name |password_hash| tags |

++–+-+

| guest | k2rhpzCrZBKkY5WRhUWrGm5DCkg= | administrator |

| linuxprobe | P+YxK1QXIYrJpek5i//rPjn5E= | administrator |

++–+-+

# cd

# rabbitmqadmin list users

++–+-+

| name |password_hash| tags |

++–+-+

| guest | k2rhpzCrZBKkY5WRhUWrGm5DCkg= | administrator |

| linuxprobe | P+YxK1QXIYrJpek5i//rPjn5E= | administrator |

++–+-+

# rabbitmqadmin list vhosts

+++

| name | tracing |

+++

| /| False |

| /my_vhost | False |

+++

详细可以参考

CentOS6.7系统安租戚装RabbitMQ3.7.8集群环境

关于dispatch linux的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 解密dispatch linux:Linux系统中的进程调度机制 (dispatch linux)