เครื่อง Linux ไม่ได้นั่งเฉยๆ — มีโปรแกรมหลายสิบหลายร้อยตัวกำลังวิ่งอยู่เบื้องหลังตลอดเวลา บทนี้จะสอนให้คุณ “มองเห็น” มัน สั่งหยุดมันได้ และที่สำคัญสุด — คุมบริการ (service) ด้วย systemd ซึ่งเป็นหัวใจที่ออกสอบหนักมาก
🌱 บทนี้เขียนเพื่อคนที่ไม่เคยแตะ Linux มาก่อนเลยคำว่า process (โพรเซส) แปลตรงตัวว่า “สิ่งที่กำลังดำเนินการอยู่” — ในโลก Linux มันหมายถึง โปรแกรมที่กำลังทำงานอยู่ ณ ตอนนี้
ลองแยกให้ชัด: ไฟล์โปรแกรมที่นอนอยู่บนดิสก์ยังไม่ใช่ process — มันเป็นแค่ “สูตรอาหาร” ที่เขียนไว้เฉยๆ แต่เมื่อไหร่ที่คุณ เปิดมันขึ้นมารัน เครื่องจะโหลดมันเข้าหน่วยความจำและให้ CPU ทำงานตามนั้น — ตอนนั้นแหละมันถึงกลายเป็น process
process แต่ละตัวจะได้ เลขประจำตัว เรียกว่า PID (Process ID) ซึ่งไม่ซ้ำกันเลยในเครื่องตอนนั้น เวลาเราจะสั่งอะไรกับ process ตัวไหน เราจะอ้างถึงมันด้วยเลข PID นี้
นึกถึง โรงพยาบาลที่แจกบัตรคิว: พอคุณเดินเข้าไป คุณจะได้บัตรคิวที่มี หมายเลข ไม่ซ้ำใคร เช่น คิว 47
• โปรแกรมบนดิสก์ = ตัวคุณที่ยังไม่ได้เข้าโรงพยาบาล
• process = ตัวคุณที่ได้บัตรคิวแล้ว กำลังรอรับบริการอยู่ในระบบ
• PID = หมายเลขบัตรคิวของคุณ — เจ้าหน้าที่จะเรียกคุณด้วยเลขนี้ ไม่ใช่ชื่อ
ถ้าเจ้าหน้าที่อยาก“เรียก” หรือ “ตัดคิว” ใครออก เขาก็อ้างเลขบัตรนั้น เหมือนที่เราใช้ PID อ้างถึง process
process ตัวพิเศษที่ควรรู้จักคือ PID 1 — เป็น process ตัวแรกสุดที่เครื่องสร้างขึ้นตอนบูต และเป็น “พ่อ” ของ process อื่นๆ ทั้งหมด บน RHEL 9 ตัวที่ครอง PID 1 ก็คือ systemd ซึ่งเราจะเจอมันเต็มๆ ในข้อ 6
ก่อนจะสั่งหยุดอะไรได้ เราต้อง “มองเห็น” ก่อนว่ามีอะไรวิ่งอยู่บ้าง มี 3 เครื่องมือหลัก
ps ย่อมาจาก “process status” มันจะแสดงรายการ process แบบ ภาพนิ่ง ณ ตอนที่คุณพิมพ์ (ไม่อัปเดตเอง) สองรูปแบบที่ใช้บ่อยที่สุดคือ ps aux และ ps -ef
[student@server1 ~]$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.4 172408 13720 ? Ss 08:00 0:03 /usr/lib/systemd/systemd root 842 0.0 0.2 90112 6400 ? Ss 08:00 0:00 /usr/sbin/sshd student 1530 0.0 0.1 12136 3200 pts/0 R+ 09:14 0:00 ps aux
ps auxแสดง process ของทุก user ทั้งเครื่อง พร้อม %CPU, %MEM และคำสั่งเต็ม (สไตล์ BSD)ps -efให้ข้อมูลคล้ายกัน แต่โชว์ PPID (เลข process แม่) ด้วย — สไตล์ที่นิยมในงานระบบPIDเลขประจำตัวของ process ที่เราจะใช้อ้างอิงเวลาสั่งงาน (เช่นจะ kill)ถ้ามี process เยอะจนตาลาย ให้กรองเอาเฉพาะที่อยากดู เช่น ps aux | grep sshd จะโชว์เฉพาะบรรทัดที่มีคำว่า sshd — เครื่องหมาย | (pipe) คือการส่งผลลัพธ์ต่อให้คำสั่งถัดไป
ต่างจาก ps ตรงที่ top เป็นจอที่ อัปเดตเองทุกๆ ไม่กี่วินาที เหมือน Task Manager ของ Windows — เห็นได้เลยว่าใครกินซีพียู กินแรมเยอะตอนนี้
[student@server1 ~]$ top top - 09:20:11 up 1:20, 1 user, load average: 0.05, 0.03, 0.00 Tasks: 142 total, 1 running, 141 sleeping %Cpu(s): 1.3 us, 0.7 sy, 0.0 ni, 98.0 id PID USER PR NI VIRT RES %CPU %MEM COMMAND 1530 student 20 0 12136 3200 2.0 0.1 top 842 root 20 0 90112 6400 0.3 0.2 sshd
หน้าจอนี้จะรีเฟรชเองเรื่อยๆ ปุ่มที่ต้องรู้ขณะอยู่ใน top:
qออกจาก top — สำคัญมาก! เหมือน man ในบท M1 ถ้าไม่กด q จะออกไม่ได้Mเรียงตามการใช้ หน่วยความจำ (Memory) มากไปน้อยPเรียงตามการใช้ ซีพียู (Processor) มากไปน้อยkสั่ง kill process จากในหน้า top ได้เลย (แล้วพิมพ์ PID)เปิด top แล้วออกไม่เป็น พยายามกด Ctrl+C ก็ไม่ไป — จำง่ายๆ ว่า กด q เพื่อออก เหมือนกันกับ man
process แต่ละตัวมัก “แตกลูก” ออกไปเป็น process ใหม่ pstree จะวาดเป็นแผนภาพต้นไม้ให้เห็นว่าใครเป็นพ่อใครเป็นลูก โดยมี systemd เป็นรากบนสุด — รู้จักไว้พอ ไม่ต้องลงลึกในตอนนี้
[student@server1 ~]$ pstree systemd─┬─sshd───sshd───bash───pstree ├─NetworkManager └─crond
บางครั้ง process ค้าง ไม่ตอบสนอง หรือกินทรัพยากรจนเครื่องอืด เราต้องสั่งให้มันหยุด ในโลก Linux คำที่ใช้คือ kill (ฆ่า) — ฟังดูโหด แต่จริงๆ คือการ “ส่งสัญญาณ” ไปบอก process ว่าให้ทำอะไรสักอย่าง
signal ที่ต้องรู้มี 2 ตัวหลัก และความต่างของมันสำคัญมาก
| Signal | เลข | ความหมาย |
|---|---|---|
SIGTERM | 15 | ขอให้ปิดอย่างสุภาพ — process มีโอกาสเซฟงาน เก็บกวาด แล้วค่อยปิดเอง (ค่าเริ่มต้นของ kill) |
SIGKILL | 9 | บังคับให้ตายทันที — ไม่ให้โอกาสเก็บกวาด เคอร์เนลลากออกไปเลย ใช้เมื่อ SIGTERM ไม่ได้ผล |
นึกถึงการ ไล่คนออกจากร้านตอนปิด:
• SIGTERM (15) = พนักงานเดินไปบอกสุภาพว่า “ขอโทษนะคะ ร้านจะปิดแล้ว เก็บของแล้วออกได้เลยค่ะ” — ลูกค้าได้เก็บกระเป๋า จ่ายเงิน แล้วค่อยเดินออก
• SIGKILL (9) = ยามจับแขนลากออกไปทันที ไม่ให้เก็บของ ไม่ให้พูดอะไร
เห็นไหมว่า SIGTERM สุภาพและปลอดภัยกว่า ควรลองอันนี้ก่อนเสมอ ส่วน SIGKILL เก็บไว้เป็นไม้ตายสุดท้าย
[student@server1 ~]$ kill 1530 # ส่ง SIGTERM (15) ขอให้ PID 1530 ปิดตัวอย่างสุภาพ [student@server1 ~]$ kill -9 1530 # ส่ง SIGKILL (9) บังคับให้ PID 1530 ตายทันที [student@server1 ~]$ killall firefox # ฆ่าทุก process ที่ชื่อ firefox พร้อมกัน (อ้างด้วยชื่อ ไม่ใช่ PID) [student@server1 ~]$ pkill -u student # ฆ่า process ตามเงื่อนไข เช่น ทุกตัวของ user ชื่อ student
kill PIDส่ง SIGTERM (สุภาพ) ไปยัง process ที่ระบุด้วย PIDkill -9 PIDส่ง SIGKILL บังคับตาย — ใช้เมื่อ kill เฉยๆ ไม่ได้ผลkillall ชื่อฆ่า process ทุกตัวที่ชื่อตรงกัน ในครั้งเดียวpkillฆ่าตามรูปแบบ/เงื่อนไข เช่น ชื่อบางส่วน, ตาม user, ตาม terminalkill -9 ไม่ให้ process เซฟงานหรือเก็บกวาดเลย อาจทำให้ ข้อมูลพัง หรือเหลือไฟล์ขยะค้างไว้ ให้ลอง kill (สุภาพ) ก่อนเสมอ แล้วรอสักครู่ ถ้ายังไม่ยอมตายจริงๆ ค่อยใช้ -9
ปกติเวลารันคำสั่ง terminal จะ “ค้าง” รอจนคำสั่งนั้นเสร็จก่อนถึงจะรับคำสั่งใหม่ได้ เราเรียกแบบนี้ว่ารันแบบ foreground (เบื้องหน้า) แต่บางงานใช้เวลานาน เราอยากให้มันวิ่งอยู่ background (เบื้องหลัง) แล้วเราทำอย่างอื่นต่อได้
เหมือน เครื่องซักผ้า: คุณกดเริ่มซัก (สั่งงาน) แล้วเดินไปทำอย่างอื่นได้ ไม่ต้องยืนเฝ้าหน้าเครื่องจนกว่าจะซักเสร็จ — นั่นคือการรันเบื้องหลัง ส่วนการยืนเฝ้าจนเสร็จคือการรันเบื้องหน้า
[student@server1 ~]$ sleep 300 & [1] 1602 [student@server1 ~]$ jobs [1]+ Running sleep 300 & [student@server1 ~]$ fg %1 sleep 300 ^Z ← กด Ctrl+Z ตรงนี้ [1]+ Stopped sleep 300 [student@server1 ~]$ bg %1 [1]+ sleep 300 &
คำสั่ง &เติม & ท้ายคำสั่ง = สั่งให้รันเบื้องหลังตั้งแต่แรก terminal กลับมารับคำสั่งใหม่ได้ทันทีjobsดูรายการงานเบื้องหลังที่กำลังวิ่ง/หยุดอยู่ พร้อมเลขงาน เช่น [1]Ctrl+Zพักงานที่กำลังรันเบื้องหน้าไว้ชั่วคราว (สถานะ Stopped)bg %1สั่งให้งานที่พักไว้ (เลข 1) วิ่งต่อในเบื้องหลังfg %1ดึงงานเลข 1 กลับมาเบื้องหน้า (foreground) เพื่อมาดู/คุมต่อCtrl+Z = พักไว้ก่อน → bg = เอาไปวิ่งหลังบ้าน → fg = ลากกลับมาหน้าบ้าน ส่วน %1 คือเลขงาน (ดูได้จาก jobs) ไม่ใช่ PID นะ
เมื่อ process หลายตัวแย่งกันใช้ CPU เราบอกเครื่องได้ว่าตัวไหน “สำคัญ ให้คิวก่อน” ตัวไหน “ใจดี ยอมหลีกทางให้คนอื่น” ค่านี้เรียกว่า niceness (ความใจดี)
ค่า niceness อยู่ในช่วง -20 ถึง 19 และมีตรรกะที่คนชอบสับสน — จำหลักนี้ไว้
นึกถึงคนต่อคิว: คนที่ “ใจดีมาก” (niceness สูง = 19) ชอบบอกว่า “เชิญก่อนเลยครับ” เลยได้คิวช้า ได้ CPU ทีหลัง ส่วนคนที่ “ใจดีน้อย/เห็นแก่ตัว” (niceness ต่ำ = -20) จะแซงคิวตลอด ได้ CPU ก่อนใคร
สรุป: ยิ่งค่า niceness ต่ำ ยิ่งได้ CPU ก่อน (สำคัญกว่า) — ค่า -20 คือสำคัญสุด, 19 คือใจดีสุด/รอได้
[student@server1 ~]$ nice -n 10 ./backup.sh # เริ่มรัน backup.sh ด้วย niceness = 10 (ใจดี ยอมหลีกทาง) [student@server1 ~]$ renice -n 5 -p 1602 # เปลี่ยน niceness ของ process ที่วิ่งอยู่แล้ว (PID 1602) เป็น 5
nice -n ค่า คำสั่งเริ่มรันโปรแกรมใหม่พร้อมกำหนด niceness ตั้งแต่แรกrenice -n ค่า -p PIDเปลี่ยน niceness ของ process ที่กำลังวิ่งอยู่แล้วการตั้ง niceness ให้ ต่ำกว่า 0 (เช่น -10 เพื่อแย่ง CPU มากขึ้น) ต้องใช้สิทธิ์ root (sudo) ส่วน user ธรรมดาตั้งได้แค่ฝั่ง “ใจดีขึ้น” (0 ถึง 19) เท่านั้น
มาถึงหัวใจของบทนี้ บนเซิร์ฟเวอร์ Linux มีโปรแกรมจำนวนมากที่ต้องวิ่งอยู่เงียบๆ เบื้องหลังเพื่อให้บริการ เช่น เว็บเซิร์ฟเวอร์, ระบบ SSH ให้เราล็อกอินจากระยะไกล, ระบบเครือข่าย — โปรแกรมพวกนี้เราเรียกว่า service (บริการ) หรือในศัพท์ systemd เรียกว่า unit
systemd คือโปรแกรมที่ทำหน้าที่ เป็นผู้จัดการบริการทั้งหมด มันคือ process ตัวแรกสุดที่บูตขึ้นมา (PID 1) และจากนั้นมันก็คอยสั่งเปิด สั่งปิด คอยดูแล และคอยสตาร์ตใหม่ให้บริการต่างๆ ตลอดเวลาที่เครื่องเปิดอยู่
นึกถึง ผู้จัดการห้างสรรพสินค้า: เช้ามาเขาเป็นคนแรกที่มาถึง (บูตขึ้นก่อน = PID 1) แล้วเขาก็สั่ง “เปิดแผนกอาหาร เปิดแผนกเสื้อผ้า เปิดลิฟต์” (สตาร์ต service ต่างๆ)
ระหว่างวัน ถ้าแผนกไหนมีปัญหาไฟดับ เขาก็สั่งให้เปิดใหม่ ถ้าจะปิดปรับปรุงแผนกไหนก็สั่งปิดได้ และเขายังจดไว้ด้วยว่า “พรุ่งนี้เปิดร้านมาให้เปิดแผนกไหนอัตโนมัติบ้าง”
เราในฐานะแอดมิน ไม่ได้ไปเปิด–ปิดแผนกเอง แต่เรา “สั่งผู้จัดการ” ให้ทำแทน — เครื่องมือที่เราใช้สั่งผู้จัดการคนนี้ชื่อว่า systemctl
systemctl (อ่านว่า “system-control”) คือคำสั่งที่เราใช้คุย/สั่งงาน systemd รูปแบบคือ systemctl [คำกริยา] [ชื่อ service] เช่น systemctl status sshd
[student@server1 ~]$ systemctl status sshd ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled) Active: active (running) since Mon 09:00:00; 1h ago Main PID: 842 (sshd)
บรรทัดที่ต้องอ่านให้เป็น — มีสองคำที่คนละความหมายกัน (ข้อ 8 จะเจาะลึก):
Active:ตอนนี้กำลังวิ่งอยู่ไหม — active (running) = วิ่งอยู่, inactive (dead) = หยุดอยู่Loaded: ...enabledตอนบูตจะเปิดเองไหม — enabled = เปิดเองอัตโนมัติ, disabled = ไม่เปิดเอง[root@server1 ~]# systemctl start httpd [root@server1 ~]# systemctl stop httpd [root@server1 ~]# systemctl restart httpd [root@server1 ~]# systemctl reload httpd
startเปิดบริการเดี๋ยวนี้ (แต่ไม่เกี่ยวกับการบูตครั้งหน้า)stopปิดบริการเดี๋ยวนี้restartปิดแล้วเปิดใหม่ทั้งตัว — process ตายแล้วเกิดใหม่ ใช้เมื่อแก้ค่าเยอะหรือบริการค้างreloadโหลดค่าใหม่โดยไม่ปิดบริการ — process เดิมยังวิ่งต่อ ไม่มีช่วงดับ (แต่ไม่ใช่ทุกบริการที่รองรับ)[root@server1 ~]# systemctl enable httpd [root@server1 ~]# systemctl disable httpd [root@server1 ~]# systemctl is-enabled httpd enabled [root@server1 ~]# systemctl is-active httpd active
enableตั้งให้บริการเปิดเองอัตโนมัติทุกครั้งที่บูต (ไม่เปิดเดี๋ยวนี้)disableยกเลิกการเปิดเองตอนบูตis-enabledถามว่า “ตั้งให้เปิดเองตอนบูตไว้ไหม?” ตอบ enabled หรือ disabledis-activeถามว่า “ตอนนี้กำลังวิ่งอยู่ไหม?” ตอบ active หรือ inactiveนี่คือเรื่องที่ทำให้คนสอบตกมานักต่อนัก ขอให้อ่านช้าๆ และจำให้ขึ้นใจ ความต่างมีแค่นี้
| คำสั่ง | ทำอะไร | อยู่รอดหลัง reboot ไหม? |
|---|---|---|
systemctl start | เปิดบริการเดี๋ยวนี้ | ❌ ไม่ — รีบูตแล้วกลับไปปิด |
systemctl enable | ตั้งให้เปิดเองตอนบูต | ✅ ใช่ — แต่ไม่เปิดให้ตอนนี้ |
นึกถึง ไฟในห้อง:
• start = กดสวิตช์เปิดไฟตอนนี้ — สว่างทันที แต่พอไฟดับแล้วมาใหม่ (reboot) ไฟก็ไม่ติดเอง
• enable = ตั้งระบบ timer ให้ไฟเปิดเองทุกเช้า — แต่ถ้าตอนนี้ยังไม่ถึงเวลา ไฟก็ยังไม่ติด ต้องไปกดสวิตช์เองอยู่ดี
เห็นไหมว่ามันคนละเรื่องกัน! ตัวหนึ่งคุม “ตอนนี้” อีกตัวคุม “ครั้งหน้าที่บูต”
ประโยคนี้ = ต้องทำ ทั้งสองอย่าง ถ้าทำแค่ start เครื่องตรวจจะเจอว่า reboot แล้วบริการไม่ขึ้น = ตกข้อนั้น ถ้าทำแค่ enable เครื่องตรวจจะเจอว่าตอนนี้บริการยังไม่วิ่ง = ก็ตกอีก
ทางที่ปลอดภัยและเร็วที่สุดคือใช้ ตัวลัด --now ซึ่งทำทั้ง enable + start พร้อมกันในคำสั่งเดียว:
[root@server1 ~]# systemctl enable --now httpd # เท่ากับสั่งทั้ง enable (เปิดเองตอนบูต) และ start (เปิดเดี๋ยวนี้) พร้อมกัน [root@server1 ~]# systemctl disable --now httpd # กลับกัน: disable + stop พร้อมกัน
จำสั้นๆ: เจอโจทย์ “เปิด + ให้เปิดเองหลังบูต” ให้พิมพ์ systemctl enable --now ชื่อบริการ แล้วยืนยันด้วย systemctl status ชื่อบริการ ว่าเห็นทั้ง active (running) และ enabled
เวลาอยากสำรวจว่าเครื่องมีบริการอะไรบ้าง มีสองคำสั่งที่ชื่อคล้ายกันแต่ตอบคนละคำถาม
[student@server1 ~]$ systemctl list-units --type=service UNIT LOAD ACTIVE SUB DESCRIPTION sshd.service loaded active running OpenSSH server daemon crond.service loaded active running Command Scheduler [student@server1 ~]$ systemctl list-unit-files --type=service UNIT FILE STATE sshd.service enabled httpd.service disabled
list-unitsแสดง unit ที่ systemd โหลดอยู่ตอนนี้ — เน้นดูว่าอะไรกำลัง active/runninglist-unit-filesแสดง unit ทั้งหมดที่ติดตั้งไว้ในเครื่อง พร้อมสถานะ enabled/disabled (เน้นดูตอนบูต)RHEL มีบริการชื่อ tuned ที่ช่วยปรับจูนเครื่องให้เหมาะกับงาน โดยเลือกเป็น “โปรไฟล์” สำเร็จรูป เช่น โปรไฟล์ที่เน้นประหยัดไฟ, เน้นความแรง, หรือเหมาะกับเซิร์ฟเวอร์เสมือน — เครื่องมือที่ใช้สั่งคือ tuned-adm
[root@server1 ~]# tuned-adm active Current active profile: virtual-guest [root@server1 ~]# tuned-adm list - balanced - powersave - throughput-performance [root@server1 ~]# tuned-adm profile throughput-performance
tuned-adm activeดูว่าตอนนี้ใช้โปรไฟล์อะไรอยู่tuned-adm listดูรายชื่อโปรไฟล์ที่มีให้เลือกทั้งหมดtuned-adm profile ชื่อเปลี่ยนไปใช้โปรไฟล์ที่ต้องการในชีวิตจริง tuned ปรับให้อัตโนมัติได้ดีอยู่แล้ว บทนี้แค่ให้คุ้นหน้าคำสั่ง tuned-adm ไว้ — รู้ว่า active ดูโปรไฟล์ปัจจุบัน, list ดูตัวเลือก, profile เปลี่ยน ก็พอ
enable ≠ เปิดตอนนี้ และ start ≠ เปิดเองหลังบูต ใช้ enable --now ให้จบในคำสั่งเดียวจะปลอดภัยสุดkill สุภาพก่อน เสี่ยงข้อมูลพังและไฟล์ค้าง — ลอง SIGTERM ก่อนเสมอrestart = ปิดแล้วเปิดใหม่ (มีช่วงดับสั้นๆ) ส่วน reload = โหลดค่าใหม่โดยไม่ดับบริการ ถ้าแก้ config แล้วอยากให้มีผลแบบไม่กระทบผู้ใช้ ให้ลอง reload ก่อนsudo) ส่วน status, is-active, is-enabled นั้น user ธรรมดาดูได้q เพื่อออก อย่ามัวงมหา Ctrl+Chttpd ไม่ใช่ apache ถ้าไม่แน่ใจ ใช้ systemctl status ชื่อ หรือ list-unit-files หาก่อน| คำสั่ง | ทำอะไร |
|---|---|
ps aux / ps -ef | ดูรายการ process ทั้งหมด (ภาพนิ่ง) |
top | ดู process สดแบบเรียลไทม์ (กด q เพื่อออก) |
pstree | ดูความสัมพันธ์พ่อ–ลูกของ process แบบต้นไม้ |
kill PID | ส่ง SIGTERM (15) ขอให้ปิดสุภาพ |
kill -9 PID | ส่ง SIGKILL (9) บังคับตายทันที |
killall ชื่อ | ฆ่า process ทุกตัวตามชื่อ |
pkill | ฆ่า process ตามเงื่อนไข (ชื่อบางส่วน, user ฯลฯ) |
คำสั่ง & | รันเบื้องหลัง |
jobs | ดูงานเบื้องหลัง |
Ctrl+Z / bg / fg | พักงาน / วิ่งหลังบ้าน / ดึงกลับหน้าบ้าน |
nice -n ค่า คำสั่ง | เริ่มโปรแกรมใหม่พร้อมตั้ง niceness |
renice -n ค่า -p PID | เปลี่ยน niceness ของ process ที่วิ่งอยู่ |
systemctl status ชื่อ | ดูสถานะบริการ (active? enabled?) |
systemctl start / stop | เปิด / ปิดบริการเดี๋ยวนี้ |
systemctl restart / reload | ปิดเปิดใหม่ / โหลดค่าใหม่โดยไม่ดับ |
systemctl enable / disable | ตั้ง / ยกเลิกการเปิดเองตอนบูต |
systemctl enable --now ชื่อ | ⭐ enable + start พร้อมกัน (ท่าสอบ) |
systemctl is-active / is-enabled | ถามว่ากำลังวิ่งไหม / ตั้งเปิดเองไว้ไหม |
systemctl list-units | ดู unit ที่โหลดอยู่ตอนนี้ |
systemctl list-unit-files | ดู unit ทั้งหมดที่ติดตั้ง + enabled/disabled |
tuned-adm active / list / profile | ดู / เลือกโปรไฟล์ประสิทธิภาพ |
มองเห็น process ที่วิ่งอยู่ (ps, top) → สั่งหยุดเป็น (kill) → รันงานเบื้องหลังเป็น → และคุม service ด้วย systemctl ได้คล่อง โดยเฉพาะแยกออกว่า start = ตอนนี้ ส่วน enable = ตอนบูต และเจอโจทย์ “เปิด + ให้เปิดเองหลัง reboot” ก็ตอบ systemctl enable --now ชื่อ ได้ทันที