← Systems Foundations

LINUX CORE · 83

Process / Service / Logs:程式檔案存在,不代表 Server 正在跑

Source file 是靜態資料;process 才是執行中的程式。Production server 常由 systemd 等 service manager 負責啟動、重啟、停止、保存狀態與集中日誌。Debug 要把 file、process、service、log 分開。

Learning outcomes

1. Program vs Process

/srv/app/server.js
   ↓ node server.js
PID 4217
memory / cwd / env / open files

同一份 server.js 可以同時啟動兩個 processes;它們有不同 PID 與 memory state。

2. 看 process

ps aux
ps -ef
pgrep -af node

先確認 process 是否存在,再去查 network listener。不存在的 process 不可能正在 listen。

3. systemd service

systemctl status course-api
systemctl restart course-api
systemctl stop course-api

Service manager 可以依設定啟動 process、設定 working directory/env、restart policy,並追蹤 unit 狀態。

4. journal logs

journalctl
  -u course-api
  --since "10 min ago"

Startup error、uncaught exception、permission failure 常先出現在 service logs。

5. Restart loop

service starts
  ↓ crash
manager restarts
  ↓ crash
repeat

看到「active 一下又死」時,要看最早的 startup error,不是只反覆 restart。

Project checkpoint:Server Workspace v3

把 Course API 當 systemd service 模擬:設定 WorkingDirectory、PORT、啟動 command,然後故意給錯 config 觀察 failure。

[Service]
WorkingDirectory=/srv/course-api/current
ExecStart=/usr/bin/node server.js
Environment=PORT=3000

Debug evidence:網站 502

  1. service active 嗎?
  2. process PID 存在嗎?
  3. journal 有 startup error 嗎?
  4. process 是否真的 listen expected port?

Knowledge check

  1. Program file 與 process 差在哪?
  2. systemd 在幫你管理什麼?
  3. restart loop 應先找哪種 evidence?
  4. 畫出 service unit → process → logs 的關係。