Systemd基础篇:4:对服务启动出现的问题进行debug的方法
Systemd被诟病的很多的点之一就是出现问题之后很难确认原因,其实在很早的时候systemd就提供了debug的方法,这篇文章介绍常用的一种方式,并结合一个常见的很容易忽视的问题来进行说明。
场景
workingdirectory事前不存在,但是status提示信息过少,journalctl没有有益信息提示,详细可参看下述文章:
- https://liumiaocn.blog.csdn.net/article/details/88860759
设定方式
使用如下方式可以在CentOS7上得到验证可以对服务启动进行debug,与其说debug,更准确地说是打出相关的日志信息以进行辅助。
Step 1: 设定system.conf
对象文件:/etc/systemd/system.conf
- 修改内容:设定LogLevel
LogLevel=debug
- 设定例
[root@liumiaocn systemd]# cat system.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See systemd-system.conf(5) for details.[Manager]
LogLevel=debug
#LogLevel=info
#LogTarget=journal-or-kmsg
#LogColor=yes
#LogLocation=no
#DumpCore=yes
#CrashShell=no
#ShowStatus=yes
#CrashChVT=1
#CtrlAltDelBurstAction=reboot-force
#CPUAffinity=1 2
#JoinControllers=cpu,cpuacct net_cls,net_prio
#RuntimeWatchdogSec=0
#ShutdownWatchdogSec=10min
#CapabilityBoundingSet=
#SystemCallArchitectures=
#TimerSlackNSec=
#DefaultTimerAccuracySec=1min
#DefaultStandardOutput=journal
#DefaultStandardError=inherit
#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s
#DefaultRestartSec=100ms
#DefaultStartLimitInterval=10s
#DefaultStartLimitBurst=5
#DefaultEnvironment=
#DefaultCPUAccounting=no
#DefaultBlockIOAccounting=no
#DefaultMemoryAccounting=no
#DefaultTasksAccounting=no
#DefaultTasksMax=
#DefaultLimitCPU=
#DefaultLimitFSIZE=
#DefaultLimitDATA=
#DefaultLimitSTACK=
#DefaultLimitCORE=
#DefaultLimitRSS=
#DefaultLimitNOFILE=
#DefaultLimitAS=
#DefaultLimitNPROC=
#DefaultLimitMEMLOCK=
#DefaultLimitLOCKS=
#DefaultLimitSIGPENDING=
#DefaultLimitMSGQUEUE=
#DefaultLimitNICE=
#DefaultLimitRTPRIO=
#DefaultLimitRTTIME=
[root@liumiaocn systemd]#
Step 2: reboot
重启操作系统
Step 3: 添加Environment
[root@liumiaocn system]# cat liumiaocn.service
[Unit]
Description=Systemd Service Sample By liumiaocn
Documentation=https://liumiaocn.blog.csdn.net/[Service]
Environment=SYSTEMD_LOG_LEVEL=debug
WorkingDirectory=/tmp/systemd_working_dir
ExecStart=/usr/bin/echo "hello world"[Install]
WantedBy=multi-user.target
[root@liumiaocn system]#
确认结果
再次启动测试用的服务
[root@liumiaocn system]# systemctl daemon-reload
[root@liumiaocn system]# systemctl start liumiaocn
然后使用status或者journalctl均可看到更加详细的输入
[root@liumiaocn system]# systemctl status liumiaocn
● liumiaocn.service - Systemd Service Sample By liumiaocnLoaded: loaded (/usr/lib/systemd/system/liumiaocn.service; disabled; vendor preset: disabled)Active: failed (Result: exit-code) since Fri 2019-04-05 20:31:25 CST; 7s agoDocs: https://liumiaocn.blog.csdn.net/Process: 3311 ExecStart=/usr/bin/echo hello world (code=exited, status=200/CHDIR)Main PID: 3311 (code=exited, status=200/CHDIR)Apr 05 20:31:25 liumiaocn systemd[1]: Forked /usr/bin/echo as 3311
Apr 05 20:31:25 liumiaocn systemd[1]: liumiaocn.service changed dead -> running
Apr 05 20:31:25 liumiaocn systemd[1]: Job liumiaocn.service/start finished, result=done
Apr 05 20:31:25 liumiaocn systemd[1]: Started Systemd Service Sample By liumiaocn.
Apr 05 20:31:25 liumiaocn systemd[1]: Child 3311 belongs to liumiaocn.service
Apr 05 20:31:25 liumiaocn systemd[1]: liumiaocn.service: main process exited, code=exited, status=200/CHDIR
Apr 05 20:31:25 liumiaocn systemd[1]: liumiaocn.service changed running -> failed
Apr 05 20:31:25 liumiaocn systemd[1]: Unit liumiaocn.service entered failed state.
Apr 05 20:31:25 liumiaocn systemd[1]: liumiaocn.service failed.
Apr 05 20:31:25 liumiaocn systemd[1]: liumiaocn.service: cgroup is empty
[root@liumiaocn system]#
- journalctl输出
[root@liumiaocn system]# journalctl -u liumiaocn
-- Logs begin at Fri 2019-04-05 20:30:17 CST, end at Fri 2019-04-05 20:31:42 CST. --
Apr 05 20:31:25 liumiaocn systemd[1]: Trying to enqueue job liumiaocn.service/start/replace
Apr 05 20:31:25 liumiaocn systemd[1]: Installed new job liumiaocn.service/start as 4624
Apr 05 20:31:25 liumiaocn systemd[1]: Enqueued job liumiaocn.service/start as 4624
Apr 05 20:31:25 liumiaocn systemd[1]: About to execute: /usr/bin/echo 'hello world'
Apr 05 20:31:25 liumiaocn systemd[1]: Forked /usr/bin/echo as 3311
Apr 05 20:31:25 liumiaocn systemd[1]: liumiaocn.service changed dead -> running
Apr 05 20:31:25 liumiaocn systemd[1]: Job liumiaocn.service/start finished, result=done
Apr 05 20:31:25 liumiaocn systemd[1]: Started Systemd Service Sample By liumiaocn.
Apr 05 20:31:25 liumiaocn systemd[1]: Child 3311 belongs to liumiaocn.service
Apr 05 20:31:25 liumiaocn systemd[1]: liumiaocn.service: main process exited, code=exited, status=200/CHDIR
Apr 05 20:31:25 liumiaocn systemd[1]: liumiaocn.service changed running -> failed
Apr 05 20:31:25 liumiaocn systemd[1]: Unit liumiaocn.service entered failed state.
Apr 05 20:31:25 liumiaocn systemd[1]: liumiaocn.service failed.
Apr 05 20:31:25 liumiaocn systemd[1]: liumiaocn.service: cgroup is empty
[root@liumiaocn system]#
总结
按照本文的步骤即可对服务进行debug信息的输出,但是至于从日志中能否看出期待的结果,那是systemd需要回答的另外一个问题了,所以经验的总结和归纳也非常重要,毕竟systemd已经是目前的主要方式了。
Systemd基础篇:4:对服务启动出现的问题进行debug的方法相关推荐
- 鸟哥的Linux私房菜(基础篇)- 第二十章、启动流程、模块管理与 Loader
第二十章.启动流程.模块管理与 Loader 最近升级日期:2009/09/14 系统启动其实是一项非常复杂的程序,因为核心得要侦测硬件并加载适当的驱动程序后,接下来则必须要呼叫程序来准备好系统运行的 ...
- Linux基础篇之DNS服务的部署
文章目录 关于dns的名词解释 关于客户端: 关于服务端 host命令 dig命令 A记录 SOA 基本解析方式 关于报错信息: dns服务的安装与启用 安装 启用 高速缓存dns dns的正向解析 ...
- Mysql -uroot -p 登陆不上_mysql服务启动却连接不上的解决方法
mysql服务启动,但是连接不上,如何解决? 登陆报错: root@localhost:~# mysql -u root -p Enter password: ERROR 2002 (HY000): ...
- mysql错误码 1068_服务启动报错----错误1068 的解决方法
1.故障现象 尝试在"服务"管理单元窗口手动启动服务时,系统提示"错误1068:依存服务或组无法启动". 2.原因分析 某些服务依赖于其他服务或者驱动,只有这些 ...
- Systemd基础篇:workingdirectory事前不创建会导致的问题
Systemd下的服务配置,如果设定使用了workingdirectory,但是在systemctl start之前没有创建该目录,将会无法正常启动,并且根据缺省方式下的status提示信息和jour ...
- iOS基础篇非运行状态——应用启动场景介绍
蓝鸥iOS培训推荐:学习iOS开发要从基础学起,从最基本开始,那么今天教大家如何设置应用启动场景,一定要认认真看完. 首先讲到的是场景描述: 用户点击应用图标的时候,可能是第一次启动这个应用,也可能是 ...
- windows系统禁止更改服务启动类型_Win10系统关闭自动更新方法
Windows 10是微软最新的操作系统,系统上的自动更新功能可以保障Win10系统处于最新的状态,不过对于普通用户来说并不是所有的更新都是必要的,且系统频繁更新会比较影响用户正常使用.下面就和大家分 ...
- java综合知识点总结基础篇
一.JDK常用的包 java.lang: 这个是系统的基础类,比如String.Math.Integer.System和Thread,提供常用功能. java.io: 这里面是所有输入输出有关的类,比 ...
- 实战 - 谷粒商城项目:基础篇First
文章目录 SpringCloud商城- 基础篇 1. 环境搭建 1.1 centos7安装docker 1.2 docker安装MySQL5.7 1.3 docker安装Redis 1.4 环境安装配 ...
最新文章
- php中关于mysqli和mysql区别
- 打断点是什么意思_黄金走势分析?股票所说的大盘几千点,是指的什么意思
- [Skill]-Markdown编辑器技巧
- 博弈论(Game Theory) - 04 - 纳什均衡
- Surface Pro 4 和 Surface Book 使用名为 Surface UEFI(统一可扩展固件接口)的新固件接口...
- java/android 做题中整理的碎片小贴士(12)
- 用Java实现图片验证码功能
- html前端如何缓存页面,Nuxt中如何做页面html缓存
- java共享租车信息管理系统jsp源码
- 基于顺序存储结构的图书信息表的旧图书的出库(C++)
- php class行为,PHP CLASS
- bzoj1192 [HNOI2006]鬼谷子的钱袋
- UVA11752 The Super Powers【超级幂+暴力+数论】
- 不用StringBuilder!Java8的StringJoiner,也很香!
- 炸群java脚本,跪求微信炸群代码_跪求以下java程序的源代码
- CAN通信协议(一)
- iOS-[NSAttributedString]设置富文本和计算富文本高度
- Scratch——创建exe可执行文件
- 【chrome】Chrome源码剖析、上--多线程模型、进程通信、进程模型
- 2022-2028全球CAE工程服务行业调研及趋势分析报告