LINUX CORE · 83
Process / Service / Logs:程式檔案存在,不代表 Server 正在跑
Source file 是靜態資料;process 才是執行中的程式。Production server 常由 systemd 等 service manager 負責啟動、重啟、停止、保存狀態與集中日誌。Debug 要把 file、process、service、log 分開。
Learning outcomes
- 能區分 program file 與 process。
- 能使用 ps/systemctl/journalctl 基本觀察。
- 能理解 service manager 的責任。
- 能依 process lifecycle 找 startup/crash evidence。
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-apiService 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=3000Debug evidence:網站 502
- service active 嗎?
- process PID 存在嗎?
- journal 有 startup error 嗎?
- process 是否真的 listen expected port?
Knowledge check
- Program file 與 process 差在哪?
- systemd 在幫你管理什麼?
- restart loop 應先找哪種 evidence?
- 畫出 service unit → process → logs 的關係。