说明:看 systemd log 的时候发现了一段有意思的打印,不太明白为什么会这样,贴出来与朋友们分享,欢迎知道的朋友们说明下,非常感谢。
 
问题描述:服务启动时,会执行 python 脚本,该脚本去调用编译好的 C++ 可执行文件。在这之间都会有 log 输出,从时间上看是 C++ 的 log 先打印,而后打印 python 的 log。为什么会出现这样的 log 打印方式?
 
示例演示
python 脚本:
import sys
import subprocess
import re print("I am python, the first command")
cmd = "hello"
subprocess.call(cmd.split())
print("I am python, the second command")
subprocess.call(cmd.split())
subprocess.call(cmd.split())
print("OK, you win CPlusCPlus, I reminber you")
 
C++ 可执行文件 hello:
[root@lianhua lianhua_debug.log]# cat hello.cpp
#include <stdio.h> int main(void)
{
printf("Hello, I am CPlusPlus, who are you?\n"); return 0;
} [root@lianhua lianhua_debug.log]# gcc -c hello.cpp
[root@lianhua lianhua_debug.log]# gcc -o hello hello.cpp
[root@lianhua lianhua_debug.log]# env | grep usr
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin/
[root@lianhua lianhua_debug.log]# mv hello /usr/bin/
[root@lianhua lianhua_debug.log]# hello
Hello, I am CPlusPlus, who are you?
 
systemd service lianhua_debug:
[root@lianhua lianhua_debug.log]# systemctl cat lianhua_debug_log
# /usr/lib/systemd/system/lianhua_debug_log.service
[Unit]
Description=lianhua_debug_log.service [Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/python /home/lianhuasheng/lianhua_debug.log/lianhua_debug_log.py
 
启动 service:
[root@lianhua lianhua_debug.log]# systemctl status lianhua_debug_log
● lianhua_debug_log.service
Loaded: loaded (/usr/lib/systemd/system/lianhua_debug_log.service; static; vendor preset: disabled)
Active: active (exited) since Sat 2020-05-30 12:57:10 CST; 26min ago
Process: 28671 ExecStart=/bin/python /home/lianhuasheng/lianhua_debug.log/lianhua_debug_log.py (code=exited, status=0/SUCCESS)
Main PID: 28671 (code=exited, status=0/SUCCESS) May 30 12:57:10 lianhua.localdomain systemd[1]: Starting lianhua_debug_log.service...
May 30 12:57:10 lianhua.localdomain python[28671]: Hello, I am CPlusPlus, who are you?
May 30 12:57:10 lianhua.localdomain python[28671]: Hello, I am CPlusPlus, who are you?
May 30 12:57:10 lianhua.localdomain python[28671]: Hello, I am CPlusPlus, who are you?
May 30 12:57:10 lianhua.localdomain python[28671]: I am python, the first command
May 30 12:57:10 lianhua.localdomain python[28671]: I am python, the second command
May 30 12:57:10 lianhua.localdomain python[28671]: OK, you win CPlusCPlus, I remember you
May 30 12:57:10 lianhua.localdomain systemd[1]: Started lianhua_debug_log.service.
可以看到启动服务之后,输出的 log 是执行 hello 的 log,然后才是 python 脚本的输出 log。
 
 
而直接通过命令 /bin/python /home/lianhuasheng/lianhua_debug.log/lianhua_debug_log.py 执行就会出现不一样的 log 打印:
[root@lianhua lianhua_debug.log]# /bin/python /home/lianhuasheng/lianhua_debug.log/lianhua_debug_log.py
I am python, the first command
Hello, I am CPlusPlus, who are you?
I am python, the second command
Hello, I am CPlusPlus, who are you?
Hello, I am CPlusPlus, who are you?
OK, you win CPlusCPlus, I remember you
 
是不是很奇怪,为什么出现不一样的 log 打印方式呢?
个人理解不应该是先执行 python 脚本,打印 python log 然后子进程执行 hello 打印 hello 的 log,子进程退出继续执行 python 脚本,打印 python 的 log(第二种直接执行 python 脚本的方式) 这样的吗?为什么 systemd 会出现完全不一样的 log 打印呢?
 
 
(未完,待续...)
 
 
 

每天学五分钟 Liunx | 有趣的 log的更多相关文章

  1. 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange

    如何从40亿整数中找到不存在的一个 前言 给定一个最多包含40亿个随机排列的32位的顺序整数的顺序文件,找出一个不在文件中的32位整数.(在文件中至少确实一个这样的数-为什么?).在具有足够内存的情况 ...

  2. 零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形动画

    原文:零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形动画 零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形 ...

  3. 五分钟学Java:如何才能学好Java Web里这么多的技术

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 系列文章介绍 本文是<五分钟学Java>系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年 ...

  4. 《sed的流艺术之一》-linux命令五分钟系列之二十一

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  5. HDFS-异常大全-《每日五分钟搞定大数据》

    点击看<每日五分钟搞定大数据>完整思维导图以及所有文章目录 问题1:Decomminssioning退役datanode(即删除节点) 1.配置exclude: <name>d ...

  6. 【转】在服务器上排除问题的头五分钟&常用命令

    转自:https://blog.csdn.net/l821133235/article/details/80103106(在服务器上排除问题的头五分钟) 遇到服务器故障,问题出现的原因很少可以一下就想 ...

  7. 五分钟搭建一个基于BERT的NER模型

    BERT 简介 BERT是2018年google 提出来的预训练的语言模型,并且它打破很多NLP领域的任务记录,其提出在nlp的领域具有重要意义.预训练的(pre-train)的语言模型通过无监督的学 ...

  8. 一门能让你五分钟学会的语言-Brainfuck

    看到标题,不出意外的话,你肯定开始骂我了:**标题党,什么编程语言五分钟就能学会? 其实我本来也是不相信的,但是学过了才知道这是真的. 1.Brainfuck 看到这个小标题,不要误会,我没有骂人. ...

  9. 用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树

    这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托,表达式树这些应用.今天我尝试用简单的方法叙述一下,让大家在五 ...

  10. [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例) 踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-35 ...

随机推荐

  1. 新冠肺炎病毒(Covid-19)检测系统

    一 .背景 新冠肺炎是一种新的呼吸道疾病,它由新型冠状病毒引起,而这种病毒以前从未在人类身上发现 过.新冠肺炎如何传播? 新冠肺炎很容易通过与新冠肺炎患者的密切接触(距离约 6 英尺或两臂长范围内)在 ...

  2. windows端口被占用怎么办?

    简单只需要按照一下命令查找到对应的端口kill掉就好了 1.查看本机所有的端口信息 netstat -ano 2.查看本机指定端口信息 netstat -ano | findstr "端口号 ...

  3. Google Guava提供的特殊的Table集合

    1.Table 是个啥? 是一个特殊的映射,其中两个键可以在组合的方式被指定为单个值.它类似于创建映射的映射. 当你想使用多个键做索引的时候,你可能会用类似 Map<rowKey, Map< ...

  4. 寻找市场中的Alpha—WorldQuant的阿尔法设计理念(上)

    本文旨在向读者介绍Alpha的相关基本概念,以及寻找和检验Alpha的主要流程和方法.在上篇中我们梳理了 WorldQuant经典读本FindingAlphas的概要以及WebSim的使用,在下篇中我 ...

  5. 华企盾DSC苹果Mac针对Word编辑文件不加密

    解决方法:查看了客户端的控制台日志显示的进程名和加密后缀都正常,可能文件内部有rename的操作,加密所有类型解决 ​

  6. 数字孪生结合GIS能够为城市灾害预防工作提供什么帮助?

    数字孪生技术结合GIS(地理信息系统)在城市灾害预防工作中发挥着重要的作用,为城市的安全和可持续发展提供了关键帮助.数字孪生是一种将现实世界与数字虚拟世界相结合的技术,可以帮助城市规划者和管理者更好地 ...

  7. IDEA创建MyBatis项目--实现简单的查操作

    IDEA创建MyBatis项目--实现简单的查操作 1.创建一个maven工程,不使用模板 2.通过maven加载Mybatis依赖包 在pom文件中导入maven坐标 <dependencie ...

  8. Shiro 的基本使用

    简介 Apache Shiro 是一个强大的.灵活的开源安全框架,可以干净地处理验证.授权.企业会话管理和加密等功能 相关特性 Apache Shiro 具有的主要特性如下图所示: 主要关注的地方在于 ...

  9. IPv6规模部署和应用成必然趋势,IPv6监测具有很大市场潜力

    日前,中央网信办.国家发展改革委.工业和信息化部联合印发<深入推进IPv6规模部署和应用2021年工作安排>.这更深入的表明,IPv6规模部署和应用是互联网演进升级的必然趋势,是网络技术创 ...

  10. CSS3学习笔记-动画

    CSS3中提供了许多有趣和实用的动画效果,可以使页面更加生动有趣,下面介绍一些常用的动画效果. @keyframes规则 使用@keyframes规则可以创建一系列动画帧,并定义它们的状态和样式,在页 ...