[Linux] 取出一個執行中的 process 的 stdout/stderr
今天在用公司的 Github Actions 跑 CI,
結果 Terraform 跑了超久跑不完,
但因為 terraform 指令也不是我執行的,要怎麼看到它的 stdout/stderr 呢?
問了一下 ChatGPT (程式設計師是不是很快就要被取代啦…),
發現了一個之前不知道的方法,
那就是利用我已知的 strace 技能,
但加上 -e write
這個參數,就能把寫到 stdout 的東西列出來了~
來看一下執行效果吧:
我下的指令是下面這個,13586 是我要看的 process ID (PID),
加了 -s 256 的參數好讓它每行顯示到 256 個字元 (平常是截斷在 32 字元):
$ sudo strace -f -p 13586 -e write -s 256 strace: Process 13586 attached with 9 threads [pid 13594] --- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=30, si_uid=1000} --- [pid 13594] write(2, "2023/03/06 14:46:54 [TRACE] dag/walk: vertex \"module.test.module.mysql_db_version_control.null_resource.create-database (expand)\" is waiting for \"module.test.module.mysql_db_version_control.var.mysql (expand)\"\n", 208) = 208 [pid 13590] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"module.myapp.module.self_signed_tls.tls_private_key.cert (expand)\" is waiting for \"module.myapp.module.self_signed_tls.var.rsa_bits (expand)\"\n", 192) = 192 [pid 13590] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"module.myapp.var.azure_stack_fqdn (expand)\" is waiting for \"module.myapp (expand)\"\n", 133) = 133 [pid 13589] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"module.myapp.var.app_fqdns (expand)\" is waiting for \"module.myapp (expand)\"\n", 126) = 126 [pid 14713] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"provider[\\\"registry.terraform.io/hashicorp/kubernetes\\\"] (close)\" is waiting for \"module.myapp.kubernetes_namespace.test (expand)\"\n", 178) = 178 [pid 13589] --- SIGURG {si_signo=SIGURG, si_code=SI_TKILL, si_pid=30, si_uid=1000} --- [pid 13590] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"module.myapp.module.self_signed_tls (expand)\" is waiting for \"module.myapp (expand)\"\n", 135) = 135 [pid 13589] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"module.myapp.var.internal_agent_info (expand)\" is waiting for \"module.myapp (expand)\"\n", 136) = 136 [pid 13590] write(2, "2023/03/06 14:46:55 [TRACE] dag/walk: vertex \"module.myapp.helm_release.test-common (expand)\" is waiting for \"module.myapp.var.app_acr (expand)\"\n", 148) = 148 ......
基本上這就會將 write()
這個 API 的參數列出來,
所以 terraform 寫到 stdout/stderr 的東西就可以看的到囉~
(本頁面已被瀏覽過 169 次)