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的方法相关推荐

  1. 鸟哥的Linux私房菜(基础篇)- 第二十章、启动流程、模块管理与 Loader

    第二十章.启动流程.模块管理与 Loader 最近升级日期:2009/09/14 系统启动其实是一项非常复杂的程序,因为核心得要侦测硬件并加载适当的驱动程序后,接下来则必须要呼叫程序来准备好系统运行的 ...

  2. Linux基础篇之DNS服务的部署

    文章目录 关于dns的名词解释 关于客户端: 关于服务端 host命令 dig命令 A记录 SOA 基本解析方式 关于报错信息: dns服务的安装与启用 安装 启用 高速缓存dns dns的正向解析 ...

  3. Mysql -uroot -p 登陆不上_mysql服务启动却连接不上的解决方法

    mysql服务启动,但是连接不上,如何解决? 登陆报错: root@localhost:~# mysql -u root -p Enter password: ERROR 2002 (HY000): ...

  4. mysql错误码 1068_服务启动报错----错误1068 的解决方法

    1.故障现象 尝试在"服务"管理单元窗口手动启动服务时,系统提示"错误1068:依存服务或组无法启动". 2.原因分析 某些服务依赖于其他服务或者驱动,只有这些 ...

  5. Systemd基础篇:workingdirectory事前不创建会导致的问题

    Systemd下的服务配置,如果设定使用了workingdirectory,但是在systemctl start之前没有创建该目录,将会无法正常启动,并且根据缺省方式下的status提示信息和jour ...

  6. iOS基础篇非运行状态——应用启动场景介绍

    蓝鸥iOS培训推荐:学习iOS开发要从基础学起,从最基本开始,那么今天教大家如何设置应用启动场景,一定要认认真看完. 首先讲到的是场景描述: 用户点击应用图标的时候,可能是第一次启动这个应用,也可能是 ...

  7. windows系统禁止更改服务启动类型_Win10系统关闭自动更新方法

    Windows 10是微软最新的操作系统,系统上的自动更新功能可以保障Win10系统处于最新的状态,不过对于普通用户来说并不是所有的更新都是必要的,且系统频繁更新会比较影响用户正常使用.下面就和大家分 ...

  8. java综合知识点总结基础篇

    一.JDK常用的包 java.lang: 这个是系统的基础类,比如String.Math.Integer.System和Thread,提供常用功能. java.io: 这里面是所有输入输出有关的类,比 ...

  9. 实战 - 谷粒商城项目:基础篇First

    文章目录 SpringCloud商城- 基础篇 1. 环境搭建 1.1 centos7安装docker 1.2 docker安装MySQL5.7 1.3 docker安装Redis 1.4 环境安装配 ...

最新文章

  1. php中关于mysqli和mysql区别
  2. 打断点是什么意思_黄金走势分析?股票所说的大盘几千点,是指的什么意思
  3. [Skill]-Markdown编辑器技巧
  4. 博弈论(Game Theory) - 04 - 纳什均衡
  5. Surface Pro 4 和 Surface Book 使用名为 Surface UEFI(统一可扩展固件接口)的新固件接口...
  6. java/android 做题中整理的碎片小贴士(12)
  7. 用Java实现图片验证码功能
  8. html前端如何缓存页面,Nuxt中如何做页面html缓存
  9. java共享租车信息管理系统jsp源码
  10. 基于顺序存储结构的图书信息表的旧图书的出库(C++)
  11. php class行为,PHP CLASS
  12. bzoj1192 [HNOI2006]鬼谷子的钱袋
  13. UVA11752 The Super Powers【超级幂+暴力+数论】
  14. 不用StringBuilder!Java8的StringJoiner,也很香!
  15. 炸群java脚本,跪求微信炸群代码_跪求以下java程序的源代码
  16. CAN通信协议(一)
  17. iOS-[NSAttributedString]设置富文本和计算富文本高度
  18. Scratch——创建exe可执行文件
  19. 【chrome】Chrome源码剖析、上--多线程模型、进程通信、进程模型
  20. 2022-2028全球CAE工程服务行业调研及趋势分析报告

热门文章

  1. dayjs获取当日的0点和23.59.59
  2. Linux设备驱动编程第三版-笔记
  3. Windows10创建还原点备份系统(解决类似网络重置网卡错误代码56问题!!!)
  4. leetcode——340.至多包含 K 个不同字符的最长子串
  5. Matlab代码模板,图像处理,色彩补偿,色彩平衡,显示连通分量数量
  6. 招商银行信用卡中心笔试编程题 - 整数乘积最大化
  7. [日推荐]『口红IN』女票生气了怎么哄?这里有妙招!
  8. Spring Boot面试必问:启动流程
  9. 图形数据库Titan-学习笔记
  10. 微信小程序——video视频全屏展示