每天學五分鐘 Liunx 有趣的 log

2022-06-06 07:39:09 字數 3743 閱讀 4498

說明:看 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

intmain(void)

[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

usrpath=/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

3012:57:10 lianhua.localdomain systemd[1

]: starting lianhua_debug_log.service...

may

3012:57:10 lianhua.localdomain python[28671]: hello, i am cplusplus, who are you?may

3012:57:10 lianhua.localdomain python[28671]: hello, i am cplusplus, who are you?may

3012:57:10 lianhua.localdomain python[28671]: hello, i am cplusplus, who are you?may

3012:57:10 lianhua.localdomain python[28671

]: i am python, the first command

may

3012:57:10 lianhua.localdomain python[28671

]: i am python, the second command

may

3012:57:10 lianhua.localdomain python[28671

]: ok, you win cpluscplus, i remember you

may

3012: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 列印呢?

(未完,待續...)

每天五分鐘系列 教你學find

linux下的find命令用來在目錄結構中搜尋檔案,並執行指定的操作。linux下find命令提供了相當多的查詢條件,功能很強大。即使系統中含有網路檔案系統 nfs find命令在該檔案系統中同樣有效。需要注意的是在執行乙個非常消耗資源的find命令時,我們都傾向於把它放在後台執行,因為遍歷乙個大的...

tree老師 每天五分鐘教你學linux命令03

tree 使用linux的時間越久,越感覺有些工作在linux下完成就是比在windows下完成高效!比如今天要講的這個tree命令!windows和linux都有tree命令,主要功能是建立檔案列表,將所有檔案以樹的形式列出來windows下的tree比較雞肋,只有兩個引數,f 是遞迴顯示每個資料...

每天只需五分鐘防治滑鼠手

終日面對電腦的白領工作者以及經常打遊戲的青少年,有時會感到手掌發麻,或者食指在拖曳滑鼠時容易抽筋,這些症狀都是 滑鼠手 這是由於長期使用滑鼠 鍵盤造成的腕部神經壓迫,導致肌肉或關節麻 脹 疼 痙攣。北京青鳥健身 徐威編排了每日只需5分鐘就可緩解症狀的 手操 徐威告訴記者,這些動作主要訓練腕部力量和手...