Systemd基础篇:4:对服务启动出现的问题进行debug的方法

您所在的位置:网站首页 开机启动过程中出现问题 Systemd基础篇:4:对服务启动出现的问题进行debug的方法

Systemd基础篇:4:对服务启动出现的问题进行debug的方法

2024-03-02 15:42| 来源: 网络整理| 查看: 265

在这里插入图片描述 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 liumiaocn Loaded: 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 ago Docs: 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已经是目前的主要方式了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3