热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在DevStack中使用Systemd

默认情况下,DevStack以Systemd单元文件的形式运行所有服务。Systemd现在是几乎每个Linux发行版的默认init系统,并且对许多与运行

默认情况下,DevStack以Systemd单元文件的形式运行所有服务。Systemd现在是几乎每个Linux发行版的默认init系统,并且对许多与运行不良的进程相关的问题进行编码和解决。


为什么这个而不是屏幕?¶

DevStack的屏幕模型是在DevStack用户将要运行的服务数量通常小于10时发明的,这使得屏幕热键很容易跳过。然而,情况已经发生了变化(并不是所有的服务在屏幕上都是可停止的,因为有些服务在apache下,通常至少有20个项)

还有一个通用的开发人员工作流,用于更改多个服务中的代码,并且需要重新启动一组服务才能生效。


单位结构¶

最初,我们实际上想作为用户单元来执行这个任务,但是在非交互式shell下运行这个程序存在问题。现在,我们将作为系统单元运行。一些用户单元代码被保留在适当的位置,以防我们稍后可以切换回来。

所有DevStack用户单元都是在给定名称的DevStack片中创建的devstack@$servicename.service…这使得我们很容易理解哪些服务是dev堆栈运行的一部分,并允许我们在一个命令中禁用/停止它们。


操纵单位¶

假设单位n-cpu让这些例子更清楚。

启用一个单元(允许启动它):

sudo systemctl enable devstack@n-cpu.service

禁用一个单元:

sudo systemctl disable devstack@n-cpu.service

启动一个单元:

sudo systemctl start devstack@n-cpu.service

停止某单位:

sudo systemctl stop devstack@n-cpu.service

重新启动一个单元:

sudo systemctl restart devstack@n-cpu.service

见单位状况:

sudo systemctl status devstack@n-cpu.service

一次在多个单元上操作¶

Systemd支持单元操作的通配符。要重新启动dev堆栈中的每个服务,可以执行以下操作:

sudo systemctl restart devstack@*

或者要查看所有Nova流程的状态,您可以这样做:

sudo systemctl status devstack@n-*

我们最终将使单元名称更有意义,以便更容易理解您正在重新启动的内容。


查询日志¶

与systemd一起提供的其他主要功能之一是日志,这是一种访问日志的统一方法(包括通过结构化元数据进行查询)。这是用户通过journalctl命令。

日志可以通过journalctl…Journal alctl具有强大的查询功能。我们将从一些共同的选择开始。

跟踪特定服务的日志:

sudo journalctl -f --unit devstack@n-cpu.service

同时记录多个服务的日志如下:

sudo journalctl -f --unit devstack@n-cpu.service --unit devstack@n-cond.service

或者,您甚至可以使用通配符来跟踪所有的nova服务:

sudo journalctl -f --unit devstack@n-*

使用更高精度的时间戳:

sudo journalctl -f -o short-precise --unit devstack@n-cpu.service

默认情况下,日志删除“不可打印”字符,包括ASCII颜色代码。保留颜色代码(可由适当的终端/寻呼机解释)。less,默认):

sudo journalctl -a --unit devstack@n-cpu.service

当使用默认寻呼机输出到终端时,长行将被截断,但通过左/右箭头键支持水平滚动。可以通过设置SYSTEMD_LESS环境变量改为环境变量。FRXM.

您可以将输出输送到另一个工具,如grep…例如,要在nova日志中找到服务器实例UUID:

sudo journalctl -a --unit devstack@n-* | grep 58391b5c-036f-44d5-bd68-21d3c26349e6

看见man 1 journalctl为了更多。


调试¶


使用PDB¶

为了在系统控制的服务上进入常规的PDB会话,您需要手动调用流程–也就是说,将它从systemd的控制中删除。

发现用于运行服务的命令系统:

systemctl show devstack@n-sch.service -p ExecStart --no-pager

停止system d服务:

sudo systemctl stop devstack@n-sch.service

将断点注入源,例如:

import pdb; pdb.set_trace()

手动调用命令:

/usr/local/bin/nova-scheduler --config-file /etc/nova/nova.conf

一些可执行文件,如新计算,将需要与特定组一起执行。这将显示在systemd单元文件中:

sudo systemctl cat devstack@n-cpu.service | grep Group
Group = libvirt

使用SG作为这个组执行命令的工具:

sg libvirt -c '/usr/local/bin/nova-compute --config-file /etc/nova/nova-cpu.conf'

使用远程PDB¶
远程PDB在系统控制进程时工作。

确保安装了Remote-PDB:

sudo pip install remote-pdb

将断点注入源,例如:

import remote_pdb; remote_pdb.set_trace()

重新启动相关服务:

sudo systemctl restart devstack@n-api.service

时,远程-pdb代码配置telnet端口。set_trace()被调用。尽一切努力访问已检测的代码路径,并检查日志以查看显示侦听端口的消息:

Sep 07 16:36:12 p8-100-neo devstack@n-api.service[772]: RemotePdb session open at 127.0.0.1:46771, waiting for connection ...

远程登录到该端口以进入PDB会话:

telnet 127.0.0.1 46771

见远程PDB有关更多选项的主页。

已知问题¶
小心系统python库。在Pypi上有三个,它们都是非常不同的。不幸的是,它们都安装在systemd命名空间,这可能会导致一些问题。

systemd-python-这是上游维护的库,它有一个类似于systemd本身的版本号(目前234)。这是你想要的。

systemd-蟒蛇3只有图书馆,而不是你想要的。

python-systemd-又一个你不想要的图书馆在系统上安装它将破坏Ansible的运行能力。

如果我们使用的是用户单元,则[Service] - Group=参数似乎不适用于用户单元,尽管文档中说应该这样做。这意味着我们需要做一个明确的/usr/bin/sg…这样做的缺点是使syslog_标识符成为sg…我们可以使用SyslogIdentifier=,但很不幸,我们需要这项工作。这目前没有问题,因为我们只使用系统单元。

参考链接 :
https://docs.openstack.org/devstack/latest/systemd.html


推荐阅读
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
author-avatar
正茂专家
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有