FiveM ensure, start, restart และ refresh ต่างกันอย่างไร

คำสั่ง ensure, start, restart และ refresh เป็นคำสั่งพื้นฐานที่คนดูแล FiveM Server ต้องใช้อยู่บ่อย ๆ แต่แต่ละคำสั่งไม่ได้ทำงานเหมือนกัน

สรุปแบบสั้นที่สุดคือ

start   = Start Resource ที่หยุดอยู่
ensure  = ถ้าหยุดให้ Start ถ้าทำงานอยู่ให้ Restart
restart = Restart Resource ที่กำลังทำงาน
refresh = สแกน resources และ Manifest ใหม่

ตัวอย่างเช่น เพิ่งนำ Script ใหม่ชื่อ my-script เข้า Server ขณะที่ FXServer กำลังทำงานอยู่ สามารถใช้

refresh
ensure my-script

แต่ถ้า Resource ทำงานอยู่แล้วและต้องการโหลดใหม่โดยเฉพาะ สามารถใช้

restart my-script

การเข้าใจความแตกต่างของ 4 คำสั่งนี้ช่วยให้ติดตั้ง Script, แก้ Error และบริหาร Resource ได้ง่ายขึ้น โดยไม่ต้อง Restart FiveM Server ทั้งเครื่องทุกครั้ง

① start คืออะไร

คำสั่ง

start resource_name

ใช้สำหรับ Start Resource ที่อยู่ในสถานะหยุด

ตัวอย่าง

start my-script

ถ้า FiveM พบ Resource my-script และ Resource ยังไม่ได้ทำงาน ระบบจะพยายาม Start Resource นั้น

ตัวอย่างอีกแบบ

start ox_lib

เหมาะกับกรณีที่รู้ว่า Resource ยังไม่ได้ Start และต้องการเปิดมัน

② start ไม่ได้ใช้ Restart Resource

จุดสำคัญคือ start มีหน้าที่ Start Resource ที่หยุดอยู่

ถ้าต้องการ Reload Resource ที่กำลังทำงานอยู่ ควรใช้คำสั่งที่ตรงวัตถุประสงค์กว่า เช่น

restart my-script

หรือ

ensure my-script

เพราะ ensure มีพฤติกรรมตรวจสถานะ Resource ให้ด้วย

ดังนั้นอย่าใช้ start เป็นคำสั่งแทนทุกกรณีโดยไม่ดูสถานะของ Resource

③ ensure คืออะไร

คำสั่ง

ensure resource_name

มีพฤติกรรม 2 แบบ

ถ้า Resource ยังไม่ได้ทำงาน

ensure
↓
Start Resource

แต่ถ้า Resource กำลังทำงานอยู่แล้ว

ensure
↓
Restart Resource

นี่คือความแตกต่างสำคัญระหว่าง ensure กับ start

ตัวอย่าง

ensure my-script

จึงใช้ได้ทั้งกรณี Resource หยุดอยู่และกรณีต้องการให้ Resource ที่กำลังทำงานโหลดใหม่

④ ทำไม server.cfg นิยมใช้ ensure

ใน server.cfg มักพบรูปแบบ

ensure oxmysql
ensure ox_lib
ensure my-script

เพราะ ensure เหมาะสำหรับการบอก Server ว่า Resource เหล่านี้ควรอยู่ในสถานะทำงาน

ตัวอย่าง Server RP อาจจัดเป็น

# Database
ensure oxmysql

# Libraries
ensure ox_lib

# Framework
ensure framework-resource

# Custom Scripts
ensure my-script

การใช้ ensure ทำให้ Configuration อ่านง่าย และเป็นคำสั่ง Resource ที่เอกสาร FiveM ใช้งานโดยตรง

⑤ restart คืออะไร

คำสั่ง

restart resource_name

ใช้สำหรับ Restart Resource ที่กำลังทำงานอยู่

แนวคิดคือ

Resource Running
↓
Stop
↓
Start ใหม่

ตัวอย่าง

restart my-script

เหมาะหลังจากแก้ Config หรือ Code ของ Resource แล้วต้องการโหลด Resource ใหม่

⑥ restart ต่างจาก ensure อย่างไร

นี่คือจุดที่คนเริ่มทำ Server สับสนมากที่สุด

restart

ใช้ Restart Resource ถ้ามันกำลังทำงานอยู่

restart my-script

ensure

ถ้า Resource หยุดอยู่ → Start

ถ้า Resource ทำงานอยู่ → Restart

ensure my-script

ดังนั้น ensure มีความยืดหยุ่นกว่าเมื่อตัวเราไม่แน่ใจว่า Resource อยู่สถานะใด

จำง่าย ๆ ว่า

restart = ต้องการ Restart
ensure  = ต้องการให้ Resource อยู่ในสถานะทำงาน

⑦ refresh คืออะไร

refresh แตกต่างจากอีก 3 คำสั่งอย่างชัดเจน เพราะไม่ได้มีหน้าที่ Start หรือ Restart Resource โดยตรง

คำสั่งคือ

refresh

หน้าที่คือให้ FXServer สแกนโฟลเดอร์ Resources ใหม่และโหลด Resource Manifest ที่พบ

จึงมีประโยชน์มากเมื่อเพิ่งเพิ่ม Resource ใหม่เข้า Server โดยที่ FXServer กำลังเปิดอยู่

ตัวอย่าง

Copy my-script เข้า resources
↓
refresh
↓
FiveM พบ Resource ใหม่
↓
ensure my-script

⑧ refresh ไม่ได้ Start Resource ให้อัตโนมัติ

นี่เป็นเรื่องที่ต้องจำให้ชัด

การใช้

refresh

ไม่ได้หมายความว่า Resource ใหม่จะเริ่มทำงานทันที

หลัง Refresh แล้ว ยังต้องสั่ง

ensure my-script

หรือ

start my-script

อีกครั้ง

ดังนั้น Workflow สำหรับติดตั้ง Script ใหม่ขณะ Server เปิดอยู่มักเป็น

refresh
ensure my-script

ไม่ใช่ใช้ refresh อย่างเดียว

⑨ ตารางเปรียบเทียบ start, ensure, restart และ refresh

สามารถจำความแตกต่างได้ดังนี้

start
→ Start Resource ที่หยุด

ensure
→ หยุดอยู่ = Start
→ ทำงานอยู่ = Restart

restart
→ Restart Resource ที่ทำงานอยู่

refresh
→ สแกน Resource Folder และ Manifest ใหม่
→ ไม่ได้ Start Resource โดยตรง

สำหรับมือใหม่ หากจำตารางนี้ได้ก็ครอบคลุมการใช้งานพื้นฐานส่วนใหญ่แล้ว

⑩ เพิ่งติดตั้ง Script ใหม่ควรใช้คำสั่งอะไร

สมมติ Server เปิดอยู่แล้ว และเพิ่ม

resources/
└── new-script/
    └── fxmanifest.lua

ให้ใช้

refresh

จากนั้น

ensure new-script

แล้วตรวจ Server Console

ลำดับคือ

เพิ่ม Resource
↓
refresh
↓
ensure
↓
ดู Console
↓
เข้าเกมทดสอบ

ถ้าขึ้น

Couldn't find resource new-script

ให้ตรวจชื่อ Resource, Folder และ fxmanifest.lua

⑪ แก้ config.lua แล้วควรใช้คำสั่งอะไร

สมมติ Resource my-garage กำลังทำงาน และแก้

config.lua

เสร็จแล้ว

โดยทั่วไปสามารถใช้

restart my-garage

เพื่อ Reload Resource

หรือ

ensure my-garage

ก็สามารถ Restart ได้หาก Resource ทำงานอยู่

ถ้าไม่ได้เพิ่ม Resource ใหม่ refresh มักไม่ใช่ประเด็นหลักในกรณีแก้ Config ธรรมดา เว้นแต่มีการเปลี่ยน Manifest หรือโครงสร้าง Resource ที่ต้องการให้ Server สแกนใหม่

⑫ แก้ client.lua แล้วควรทำอย่างไร

หากแก้ Client Script ของ Resource ที่กำลังทำงาน สามารถ Restart Resource

restart my-script

จากนั้นตรวจ

F8

ฝั่ง Client

Resource Restart จะทำให้ Client-side Resource ถูกโหลดใหม่ตาม Lifecycle ของ Resource

แต่ Script บางประเภทอาจมี State ที่ไม่รองรับ Hot Restart ดี

ถ้าหลัง Restart แล้วพฤติกรรมแปลก ให้ลอง Reconnect หรือทดสอบจาก Server Restart เพื่อแยกว่าเป็นปัญหา Initialization หรือไม่

⑬ แก้ server.lua แล้วควรทำอย่างไร

หลักการคล้ายกัน

หลังแก้

server.lua

สามารถใช้

restart my-script

แล้วดู Server Console

หาก Error ใหม่เกิดขึ้นหลัง Restart ให้ตรวจ

SCRIPT ERROR
ชื่อไฟล์
เลขบรรทัด

ทันที

ไม่ควร Restart ซ้ำหลายครั้งโดยไม่อ่านข้อความ Error

⑭ แก้ fxmanifest.lua แล้วควรใช้ refresh ไหม

ถ้าแก้ Resource Manifest เช่น

fxmanifest.lua

โดยเฉพาะการเพิ่มไฟล์หรือเปลี่ยน Metadata การใช้

refresh

ช่วยให้ Server สแกน Resource Manifest ใหม่

จากนั้นใช้

ensure my-script

เพื่อ Start หรือ Restart Resource

ตัวอย่าง

refresh
ensure my-script

เหมาะกับกรณีมีการเปลี่ยนแปลงโครงสร้าง Resource มากกว่าการแก้ Config ธรรมดา

⑮ Resource ไม่ได้ Start แล้วใช้ restart ได้ไหม

ตามนิยามคำสั่ง restart จะ Restart Resource หาก Resource นั้นกำลัง Start อยู่

ดังนั้นถ้า Resource หยุดอยู่และต้องการเปิดขึ้นมา ควรใช้

start my-script

หรือสะดวกกว่าคือ

ensure my-script

เพราะ ensure จะ Start ให้เมื่อ Resource ยังหยุดอยู่

นี่เป็นเหตุผลที่เจ้าของ Serverจำนวนมากใช้ ensure ในงานทั่วไป

⑯ ไม่รู้ว่า Resource ทำงานอยู่หรือไม่ ใช้อะไรดี

ถ้าต้องการให้ Resource พร้อมทำงาน แต่ไม่แน่ใจสถานะ สามารถใช้

ensure my-script

เพราะ

Stopped → Start
Running → Restart

แต่ต้องเข้าใจว่าหาก Resource กำลังทำงานอยู่ ensure จะ Restart มัน

ดังนั้นถ้าเป็น Resource สำคัญที่มีผู้เล่นใช้งานอยู่ ไม่ควรพิมพ์ ensure แบบสุ่มเพียงเพื่อตรวจสถานะ

⑰ ensure อาจกระทบผู้เล่นหรือไม่

ได้ เพราะถ้า Resource กำลังทำงานอยู่แล้ว

ensure resource

จะ Restart Resource นั้น

Resource บางชนิด Restart ได้ค่อนข้างปลอดภัย เช่น Script เล็ก ๆ

แต่ Resource ขนาดใหญ่ เช่น

Framework
Inventory
Character
Phone
Housing
Banking
Database-related systems

อาจมี State หรือ Integration กับ Resource จำนวนมาก

การ Restart ขณะที่มีผู้เล่นออนไลน์อาจทำให้ระบบชั่วคราวผิดปกติ

ดังนั้น Production Server ควรรู้ก่อนว่ากำลัง ensure Resource อะไร

⑱ restart Resource Core ต้องระวัง

อย่ามอง

restart oxmysql
restart framework
restart inventory

เหมือน Restart Script แสดง Marker ธรรมดา

Resource Core อาจถูก Resource จำนวนมากเรียกใช้งาน

ตัวอย่าง

oxmysql
↓
Framework
↓
Garage
Phone
Banking
Housing
Jobs

ถ้า Restart ตัวล่างสุดของ Dependency Tree Resource ด้านบนอาจเจอ Error หรือ State ผิดปกติ

สำหรับ Core Resource บางตัว การ Maintenance และ Restart Server ทั้งชุดอาจปลอดภัยกว่า

⑲ start กับ ensure ใน server.cfg เลือกอะไรดี

สำหรับ Resource ที่ต้องการให้ทำงานเมื่อ Server เปิด โดยทั่วไปมักพบ

ensure resource_name

ตัวอย่าง

ensure oxmysql
ensure ox_lib
ensure my-script

มากกว่า

start my-script

เนื่องจาก ensure มีพฤติกรรมทำให้ Resource อยู่ในสถานะทำงานตามที่อธิบายไว้

อย่างไรก็ตาม ถ้าใช้ Server Pack หรือ Framework ที่มี Configuration ของตัวเอง ควรยึดรูปแบบจาก Documentation ของชุดนั้นด้วย

⑳ ใช้ ensure ทั้ง Category ได้หรือไม่

ได้

FiveM รองรับ Category Name กับคำสั่ง Resource

สมมติมี

resources/
└── [jobs]/
    ├── police/
    ├── ambulance/
    └── mechanic/

สามารถใช้

ensure [jobs]

ได้

เช่นเดียวกับ

start [jobs]
restart [jobs]

ตามคำสั่งที่รองรับ Category

แต่ต้องระวังว่า ensure [jobs] อาจกระทบ Resource หลายตัวใน Category พร้อมกัน

㉑ restart Category ต้องระวังมากกว่า Resource เดียว

ถ้าสั่ง

restart [jobs]

คุณไม่ได้ Restart Job ตัวเดียว

แต่กำลัง Restart Resource ใน Category ที่เกี่ยวข้อง

หากมี

police
ambulance
mechanic
taxi

ก็อาจได้รับผลกระทบพร้อมกัน

ใน Production Server หากต้องแก้เฉพาะ Police Script ควรใช้

restart police

แทนการ Restart ทั้ง Category โดยไม่จำเป็น

㉒ refresh Category ได้หรือไม่

refresh ไม่ต้องระบุ Resource หรือ Category

ใช้เพียง

refresh

เพราะหน้าที่ของมันคือ Rescan Resources Folder และ Resource Manifests

ไม่ใช่

refresh my-script

หรือ

refresh [jobs]

ดังนั้นคำสั่งพื้นฐานคือ

refresh

อย่างเดียว

㉓ refresh แล้ว Resource ที่กำลังทำงานจะ Restart ไหม

refresh มีหน้าที่ Rescan Resources และโหลดข้อมูล Resource Manifest ใหม่ ทำให้ Resource ใหม่สามารถถูก Start ได้

มันไม่ใช่คำสั่ง

restart all

ดังนั้นอย่าสับสน refresh กับการ Restart Resource

หลัง Refresh หากต้องการ Reload Resource ที่ต้องการ ให้ใช้ เช่น

ensure my-script

หรือ

restart my-script

ตามสถานะและวัตถุประสงค์

㉔ refresh ต้องใช้ทุกครั้งที่ Restart Script ไหม

ไม่จำเป็นเสมอไป

ถ้า Resource ถูก FiveM รู้จักอยู่แล้วและเพียงต้องการ Restart

restart my-script

ก็เพียงพอในหลายกรณี

refresh มีประโยชน์เป็นพิเศษเมื่อ

  • เพิ่ม Resource ใหม่

  • เปลี่ยน Folder

  • เปลี่ยน Resource Manifest

  • Resource ใหม่ยังไม่ถูก Server พบ

ดังนั้นไม่จำเป็นต้องใช้

refresh
restart

เป็นพิธีกรรมทุกครั้งโดยไม่มีเหตุผล

㉕ refresh แล้วขึ้น Warning ต้องอ่าน

หลัง

refresh

Console อาจแสดง Warning ของ Resource บางตัว

เช่น Resource ไม่มี Manifest หรือมีปัญหาในการ Parse

อย่ารีบข้ามแล้วใช้

ensure my-script

ทันที

เพราะข้อความจาก refresh อาจบอก Root Cause ว่าทำไม Resource ใหม่ถึงไม่พร้อม Start

โดยเฉพาะกรณี

Couldn't find resource

หรือปัญหา fxmanifest.lua

㉖ refresh แล้ว FiveM ยังหา Resource ไม่เจอ

ถ้าใช้

refresh

แล้ว

ensure my-script

ยังขึ้น Couldn't Find Resource ให้ตรวจ

resources/my-script/
fxmanifest.lua
Resource Name
Folder ซ้อน
Server Data Path
txAdmin Profile

การใช้ Refresh ซ้ำ 20 รอบไม่ได้แก้ Folder ที่วางผิด

ต้องแก้ Resource Discovery ที่ต้นเหตุ

㉗ ensure แล้ว Resource Error ต้องทำอย่างไร

สมมติใช้

ensure my-script

แล้ว Console ขึ้น

SCRIPT ERROR

อย่าพิมพ์

ensure my-script
ensure my-script
ensure my-script

ซ้ำไปเรื่อย ๆ

เพราะ Resource จะถูก Restart ซ้ำ แต่ต้นเหตุยังอยู่

ให้ตรวจ Error เช่น

Missing dependency
No such export
Syntax error
SQL error
nil value

แก้ต้นเหตุแล้วจึง ensure ใหม่

㉘ restart แล้ว Error เดิมกลับมาแปลว่าอะไร

ถ้า

restart my-script

แล้ว Error เดิมกลับมาทันที แสดงว่าปัญหาไม่ได้เกิดจาก State ชั่วคราวเพียงอย่างเดียว

อาจเป็น

  • Config ผิด

  • Dependency ขาด

  • Code Error

  • Database Error

  • Export ไม่ตรง

  • Framework ไม่รองรับ

Restart มีหน้าที่โหลด Resource ใหม่ ไม่ได้ซ่อม Code หรือ Config ให้เอง

㉙ start แล้วขึ้น Already Started ทำอย่างไร

ถ้า Resource ทำงานอยู่แล้ว แต่ต้องการ Reload หลังแก้ไฟล์ ไม่ควรพยายามใช้ start ซ้ำ

ให้ใช้

restart my-script

หรือ

ensure my-script

ตามวัตถุประสงค์

นี่คือเหตุผลที่ควรรู้สถานะของ Resource ก่อนเลือกคำสั่ง

㉚ Resource หยุดอยู่ควรใช้ start หรือ ensure

ใช้ได้ทั้ง

start my-script

และ

ensure my-script

หาก Resource หยุดอยู่

แต่ความหมายต่างกันเล็กน้อยในเชิงเจตนา

start
= ฉันต้องการ Start Resource นี้

ensure
= ฉันต้องการให้ Resource นี้อยู่ในสถานะทำงาน

สำหรับการทดสอบ Resource ใหม่ start ชัดเจนดี

สำหรับ Configuration หรือการดูแลทั่วไป ensure มักสะดวกกว่า

㉛ Resource กำลังทำงานควรใช้ restart หรือ ensure

ทั้งสองสามารถทำให้ Resource ที่กำลังทำงานถูก Restart ได้

แต่ถ้าคุณต้องการสื่อความหมายชัดเจนว่า

“ฉันต้องการ Restart Resource นี้”

ใช้

restart my-script

อ่านเข้าใจง่ายกว่า

ส่วน ensure เหมาะเมื่อเป้าหมายคือทำให้ Resource อยู่ใน Running State ไม่ว่าจะอยู่สถานะใดก่อนหน้า

㉜ หลังแก้ Script ใหม่ควรใช้ refresh + ensure หรือ restart

ขึ้นอยู่กับสิ่งที่เปลี่ยน

เพิ่ม Resource ใหม่

refresh
ensure new-script

Resource เดิม แก้ Config/Code

restart my-script

หรือ

ensure my-script

เปลี่ยน Manifest/โครงสร้างไฟล์อย่างมีนัยสำคัญ

สามารถใช้

refresh
ensure my-script

จากนั้นตรวจ Console

จำง่าย ๆ ว่า refresh เกี่ยวกับ การสแกน Resources/Manifest ส่วน start/ensure/restart เกี่ยวกับ สถานะการทำงานของ Resource

㉝ ต้อง Restart FXServer ทุกครั้งไหม

ไม่ต้อง

หนึ่งในข้อดีของระบบ Resource คือสามารถจัดการ Resource แยกจาก Server ทั้งเครื่องได้

ตัวอย่าง

restart my-script

ไม่จำเป็นต้องเตะผู้เล่นทั้งหมดออกจาก Server เสมอไป

แต่ Resource Core บางชนิดไม่เหมาะกับ Hot Restart เช่น

  • Framework Core

  • Inventory

  • Character

  • Database Layer

  • ระบบที่มี State จำนวนมาก

ดังนั้นต้องใช้วิจารณญาณว่าควร Restart Resource หรือทำ Maintenance Server

㉞ Hot Restart คืออะไร

คำว่า Hot Restart ในบริบทนี้หมายถึงการ Restart Resource ขณะที่ FXServer ยังเปิดอยู่

ตัวอย่าง

restart my-script

Server ทั้งเครื่องไม่ดับ แต่ Resource นั้นถูก Reload

เหมาะกับ Development และ Script ทั่วไปหลายประเภท

อย่างไรก็ตาม Resource ที่ไม่ออกแบบมารองรับ Hot Restart อาจเกิดอาการ เช่น

  • Player State หาย

  • NPC ซ้ำ

  • UI ค้าง

  • Cache ภายในไม่ถูกสร้างใหม่

  • Integration กับ Resource อื่นผิดปกติ

จึงต้องทดสอบ Resource แต่ละตัว

㉟ Restart Resource แล้วผู้เล่นต้อง Reconnect ไหม

ไม่เสมอไป

Script หลายตัวสามารถ Restart แล้วกลับมาทำงานได้เลย

แต่บางตัวผูก Initialization กับ

  • Player Loaded

  • Character Selected

  • Server Boot

  • Client Resource Start

หาก Restart แล้วผู้เล่นเดิมใช้งานไม่ได้ แต่ Reconnect แล้วใช้ได้ อาจเป็นปัญหา Initialization ของ Script

อย่ากำหนดให้ “Reconnect ทุกครั้ง” เป็นวิธีแก้ถาวร ควรตรวจ Lifecycle หรือแจ้ง Developer ของ Resource

㊱ start, ensure, restart ใช้ใน Console ได้หรือไม่

ได้

Cfx.re ระบุว่า Server Commands สามารถเรียกจากหลายบริบท เช่น Server Console และ Server Configuration

ตัวอย่างใน Console

ensure my-script

หรือใน server.cfg

ensure my-script

แต่ผลด้าน Timing ต่างกัน เพราะ server.cfg ถูกประมวลผลระหว่าง Server Startup ตามลำดับที่เขียน

จึงต้องจัด Dependency และ Start Order ให้ถูก

㊲ ทำไม ensure ใน Console ใช้ได้ แต่ใน server.cfg ใช้ไม่ได้

อาการนี้มักชี้ไปที่ Start Order

ตัวอย่าง server.cfg

ensure my-script
ensure ox_lib

ตอน Boot my-script เริ่มก่อน Dependency

จึงเกิด Error

แต่หลัง Server เปิดเสร็จ คุณใช้

ensure my-script

อีกครั้ง

ตอนนี้ ox_lib พร้อมแล้ว Resource จึงทำงาน

วิธีแก้คือเรียงใหม่

ensure ox_lib
ensure my-script

ไม่ใช่พิมพ์ ensure ด้วยมือทุกครั้งหลัง Boot

㊳ คำสั่งไหนเหมาะกับ server.cfg มากที่สุด

สำหรับ Resource ที่ต้องเปิดพร้อม Server รูปแบบที่พบได้ทั่วไปคือ

ensure resource_name

ตัวอย่าง

ensure oxmysql
ensure ox_lib
ensure framework
ensure my-script

แต่ต้องเน้นว่า ลำดับสำคัญกว่าแค่เลือกคำสั่งถูก

ถ้า Dependency ถูก Start หลัง Resource ลูก ต่อให้ใช้ ensure ถูกคำก็ยังเกิดปัญหาได้

㊴ คำสั่งไหนเหมาะกับการพัฒนา Script

ระหว่าง Development มักใช้ Workflow ประมาณ

แก้ Code
↓
restart my-script
↓
ตรวจ Console / F8
↓
แก้ Code
↓
restart my-script

ถ้าเพิ่ม Resource ใหม่

เพิ่ม Resource
↓
refresh
↓
start my-script

หรือ

refresh
ensure my-script

ทำให้ Developer ไม่จำเป็นต้อง Restart FXServer ทั้งหมดทุกครั้ง

㊵ ตัวอย่างติดตั้ง Script ใหม่ขณะ Server เปิด

สมมติดาวน์โหลด my-garage แล้ววาง

resources/
└── my-garage/
    └── fxmanifest.lua

ใน Console ใช้

refresh
ensure my-garage

ถ้าทำงานแล้ว อย่าลืมเพิ่มใน server.cfg

ensure my-garage

เพื่อให้ Resource Start อัตโนมัติหลัง Restart Server

ถ้าเพียง ensure ผ่าน Console แต่ไม่เพิ่ม Startup Configuration Resource อาจไม่เปิดใน Boot ครั้งถัดไป

㊶ ตัวอย่างแก้ Config Resource เดิม

สมมติ

my-garage

กำลังทำงาน และแก้

config.lua

แล้ว

ใช้

restart my-garage

จากนั้น

  1. ตรวจ Server Console

  2. เข้าเกม

  3. ตรวจ F8

  4. ทดสอบ Garage

  5. ตรวจข้อมูลใน Database ถ้าเกี่ยวข้อง

ไม่ควรถือว่า Restart ผ่านแล้วหมายถึง Config ใหม่ทำงานถูกต้องทันที

㊷ ตัวอย่างเพิ่ม Resource หลายตัว

สมมติเพิ่งเพิ่ม

script-a
script-b
script-c

สามารถ

refresh

ครั้งเดียวเพื่อ Rescan Resources

จากนั้น Start ทีละตัว

ensure script-a
ensure script-b
ensure script-c

และตรวจ Error ทีละ Resource

ดีกว่า Start ทั้งหมดแล้วค่อยพบ Error จำนวนมากจนแยกไม่ออกว่าเกิดจากตัวไหน

㊸ อย่า restart ทั้ง Category เพื่อแก้ Script ตัวเดียว

ถ้ามี

[jobs]

และมี Job 15 ตัว

อย่าใช้

restart [jobs]

เพียงเพราะแก้ Police Script หนึ่งตัว

ควรใช้

restart police

เพื่อลดผลกระทบกับ Resource อื่นและผู้เล่น

หลักนี้สำคัญมากบน Production Server

㊹ อย่าใช้ refresh แทน restart

refresh ไม่ใช่

restart all resources

ถ้าแก้ config.lua แล้วต้องการ Reload Resource อย่าใช้เพียง

refresh

แล้วคาดหวังว่า Logic ที่กำลังทำงานจะโหลด Config ใหม่ทั้งหมดเอง

ต้อง Restart/Ensure Resource ตามความเหมาะสม

㊺ อย่าใช้ restart แทน refresh เมื่อเพิ่ม Resource ใหม่

กลับกัน ถ้า Resource ใหม่ยังไม่ถูก Server Discover การสั่ง

restart new-script

ก็ไม่ใช่ขั้นตอนที่ถูก

ควร

refresh
ensure new-script

ก่อน

นี่คือความแตกต่างหลักระหว่าง

Resource Discovery

กับ

Resource Lifecycle

㊻ ควรใช้ stop ก่อนเปลี่ยนไฟล์ไหม

สำหรับการอัปเดต Resource อย่างจริงจัง โดยเฉพาะการแทนไฟล์หลายตัว ควร Stop Resource ก่อน

stop my-script

จากนั้นเปลี่ยนไฟล์

แล้วถ้ามี Resource/Manifest ใหม่

refresh

สุดท้าย

ensure my-script

วิธีนี้ชัดเจนกว่า Copy ไฟล์จำนวนมากทับ Resource ที่กำลัง Run อยู่

㊼ ต้องใช้ stop ก่อน restart หรือไม่

ไม่ต้อง

ถ้าต้องการ Restart Resource ที่กำลังทำงาน สามารถใช้ตรง ๆ

restart my-script

เพราะคำสั่งนี้ทำหน้าที่ Restart อยู่แล้ว

การทำ

stop my-script
start my-script

สามารถให้ผลคล้ายกันในเชิง Stop แล้ว Start แต่มีคำสั่ง restart ที่ตรงเจตนากว่า

㊽ ensure เท่ากับ stop + start หรือไม่

เฉพาะกรณี Resource กำลังทำงาน ensure จะทำให้ Resource Restart

แต่ไม่ควรจำแบบตายตัวว่า

ensure = stop + start

เพราะถ้า Resource หยุดอยู่ ensure จะเพียง Start

พฤติกรรมที่ถูกต้องคือ

Resource stopped
ensure → start

Resource started
ensure → restart

นี่คือคำจำกัดความที่ควรจำ

㊾ restart เท่ากับ ensure หรือไม่

ไม่เท่ากันทุกกรณี

ถ้า Resource กำลังทำงาน ทั้งสองมีผล Restart Resource

แต่ถ้า Resource หยุดอยู่

ensure

สามารถ Start Resource ได้

ส่วน

restart

ถูกนิยามให้ Restart Resource หากมันกำลัง Start อยู่

ดังนั้น ensure ครอบคลุมสถานะมากกว่า

㊿ ใช้คำสั่งผิดทำ Server พังไหม

โดยทั่วไปการใช้ start, ensure, restart หรือ refresh ไม่ได้ทำให้ไฟล์ Server เสียโดยตรง

แต่ผลกระทบสามารถเกิดจาก Resource ที่ถูก Restart

ตัวอย่างเช่น Restart

Inventory

กลาง Session อาจกระทบ Script จำนวนมาก

หรือ Restart

Framework

อาจทำให้ Player State และระบบลูกผิดปกติ

ดังนั้นปัญหาไม่ได้อยู่ที่คำสั่งอันตราย แต่คือการใช้คำสั่งกับ Resource โดยไม่รู้ Dependency

เลือกคำสั่ง FiveM ให้ถูกแบบง่ายที่สุด

จำตามสถานการณ์นี้ได้เลย

ต้องการเปิด Resource ที่หยุดอยู่

start my-script

หรือ

ensure my-script

ต้องการ Restart Resource ที่กำลังทำงาน

restart my-script

ไม่รู้ว่า Resource หยุดหรือทำงานอยู่ แต่ต้องการให้มันทำงาน

ensure my-script

เพิ่งเพิ่ม Resource ใหม่เข้า Server

refresh
ensure my-script

เพิ่งแก้ Script เดิม

restart my-script

เพิ่งแก้ Manifest หรือโครงสร้าง Resource

refresh
ensure my-script

นี่เป็นกฎจำง่ายที่ใช้ได้กับงาน FiveM Server ส่วนใหญ่

Checklist ก่อนใช้ start, ensure, restart หรือ refresh

ก่อน Start Resource

  • Resource อยู่ใน resources

  • มี fxmanifest.lua

  • Dependency ครบ

  • ชื่อ Resource ถูก

ก่อน Ensure

  • รู้ว่า Resource อาจถูก Restart หากกำลังทำงาน

  • ตรวจว่ามีผู้เล่นใช้งานระบบสำคัญหรือไม่

  • Dependency พร้อม

ก่อน Restart

  • รู้ผลกระทบของ Resource

  • ไม่ใช่ Core Resource ที่ควร Maintenance

  • Backup ก่อนถ้ามีการแก้ไฟล์สำคัญ

ก่อน Refresh

  • Resource ใหม่อยู่ถูก Folder

  • Manifest ถูกต้อง

  • เข้าใจว่า Refresh ไม่ Start Resource ให้

หลังใช้คำสั่ง

  • อ่าน Server Console

  • ตรวจ F8 ถ้ามี Client Script

  • ทดสอบ Feature จริง

  • ตรวจ Dependency

  • ตรวจ Startup อีกครั้งถ้าแก้ server.cfg

สรุป FiveM ensure, start, restart และ refresh ต่างกันอย่างไร

ความแตกต่างของคำสั่งทั้ง 4 สามารถสรุปได้สั้นที่สุดว่า

start
= Start Resource ที่หยุดอยู่

ensure
= ถ้าหยุดอยู่ให้ Start
= ถ้าทำงานอยู่ให้ Restart

restart
= Restart Resource ที่กำลังทำงาน

refresh
= Rescan resources และ Resource Manifests
= ทำให้ Resource ใหม่พร้อมถูก Start

ถ้าเพิ่งติดตั้ง Script ใหม่ขณะ Server เปิดอยู่ วิธีที่ใช้บ่อยคือ

refresh
ensure my-script

ถ้าเพียงแก้ Resource เดิมและต้องการโหลดใหม่ ใช้

restart my-script

หากต้องการให้ Resource เปิดทุกครั้งตอน Server Boot รูปแบบที่พบได้ทั่วไปใน server.cfg คือ

ensure my-script

สิ่งที่ comsiam แนะนำคืออย่าใช้ ensure หรือ restart กับ Core Resource แบบสุ่มบน Server ที่มีผู้เล่นอยู่ เพราะคำสั่งเหล่านี้สามารถทำให้ Resource ถูก Restart จริง และ Resource ลูกที่พึ่งพามันอาจได้รับผลกระทบตามไปด้วย

สำหรับการพัฒนาและทดสอบ Script comsiam แนะนำให้แยกให้ออกระหว่าง “FiveM ยังไม่รู้จัก Resource” กับ “FiveM รู้จัก Resource แล้วแต่ต้อง Reload” เพราะกรณีแรกใช้ refresh เพื่อ Rescan ส่วนกรณีหลังใช้ start, ensure หรือ restart ตามสถานะของ Resource การเข้าใจเพียงจุดนี้จะลดการ Restart Server ทั้งเครื่องโดยไม่จำเป็นได้มาก

Comments

Popular posts from this blog

FiveM ยังน่าเล่นไหม? Enhanced เปลี่ยน FiveM แค่ไหน

FiveM คืออะไร เล่นอย่างไร สำหรับมือใหม่ เริ่มต้นตั้งแต่ศูนย์

วิธีตั้ง Admin Permission ด้วย add_ace และ add_principal FiveM แบบละเอียด