ensure FiveM คืออะไร และวิธีเปิด Resource ใน server.cfg ให้ถูกต้อง
ensure คือคำสั่งของ FXServer ที่ใช้สำหรับ เปิดหรือทำให้ Resource อยู่ในสถานะ Started และเป็นคำสั่งที่พบได้บ่อยมากใน server.cfg ของ FiveM
ตัวอย่าง
ensure chat
ensure spawnmanager
ensure sessionmanager
พฤติกรรมสำคัญของ ensure คือ
Resource ยังไม่ทำงาน
→ Start
Resource ทำงานอยู่แล้ว
→ Restart
จุดนี้ทำให้ ensure แตกต่างจาก start และ restart
สำหรับ Resource ที่ต้องเปิดทุกครั้งเมื่อ Server Start การใส่
ensure resource_name
ใน server.cfg เป็นวิธีมาตรฐานที่ใช้งานง่ายและพบได้ใน Vanilla Configuration ของ Cfx.re
① Resource FiveM คืออะไร
Resource คือชุดไฟล์ที่เพิ่ม Functionality ให้ FiveM Server
ภายใน Resource อาจมี
Client Scripts
Server Scripts
Shared Scripts
NUI
Maps
Vehicles
Textures
Configuration
Streaming Assets
Server หนึ่งตัวสามารถมี Resources จำนวนมากทำงานพร้อมกัน
② Resource อยู่ที่ไหน
Cfx.re กำหนดให้ Resources อยู่ภายใต้ Folder
resources/
ของ Server Data Directory
ตัวอย่าง
server-data/
├── server.cfg
└── resources/
├── chat/
├── spawnmanager/
└── my_resource/
③ Resource ต้องมีไฟล์อะไร
Resource ปัจจุบันควรมี
fxmanifest.lua
อยู่ภายใน Resource Folder
ตัวอย่าง
my_resource/
├── fxmanifest.lua
├── client.lua
└── server.lua
FXServer จะอ่าน Manifest เพื่อรู้ว่า Resource ประกอบด้วยอะไร
④ __resource.lua คืออะไร
เป็น Resource Manifest รูปแบบเก่า
Cfx.re ยังคงกล่าวถึง
__resource.lua
ในฐานะ Manifest รุ่นก่อน
แต่ Resource ใหม่ควรใช้
fxmanifest.lua
เป็นหลัก
⑤ ensure FiveM คืออะไร
คำสั่ง
ensure my_resource
หมายความว่า
ถ้า my_resource หยุดอยู่
→ Start
ถ้า my_resource ทำงานอยู่
→ Restart
จึงเป็นคำสั่งที่สะดวกมากสำหรับ server.cfg
⑥ ensure ต่างจาก start อย่างไร
start ทำงานแบบ
Resource หยุด
→ Start
Resource ทำงานอยู่แล้ว
→ ไม่ Restart
ตัวอย่าง
start my_resource
ส่วน ensure สามารถ Restart Resource ที่ทำงานอยู่แล้วได้
⑦ ensure ต่างจาก restart อย่างไร
restart จะ Restart Resource ถ้า Resource นั้นกำลัง Started อยู่
ตัวอย่าง
restart my_resource
แต่ถ้า Resource ยังไม่ได้ Start อยู่ restart ไม่ได้มีพฤติกรรมเหมือน ensure
ensure จึงครอบคลุมกว่า
⑧ ensure ต่างจาก stop อย่างไร
stop ใช้หยุด Resource
stop my_resource
ส่วน
ensure my_resource
ทำตรงกันข้ามในเชิงเป้าหมาย คือทำให้ Resource กลับมาอยู่ในสถานะ Started
⑨ สรุป start stop restart ensure
จำง่าย ๆ
start
→ เปิด ถ้ายังปิดอยู่
stop
→ ปิด ถ้ากำลังเปิด
restart
→ Restart ถ้ากำลังเปิด
ensure
→ ถ้าปิดให้ Start
→ ถ้าเปิดให้ Restart
สำหรับ Resource ที่ต้องทำงานตอน Server Startup จึงนิยมใช้ ensure
⑩ ensure ใส่ตรงไหน
ใส่ใน
server.cfg
เช่น
ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
เมื่อ FXServer Execute Config จะสั่ง Resources เหล่านี้ทำงาน
⑪ Vanilla server.cfg ใช้ ensure หรือไม่
ใช้
ตัวอย่าง Configuration ทางการของ Cfx.re มี
ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
ensure basic-gamemode
ensure hardcap
ensure rconlog
แสดงให้เห็นว่า ensure เป็นรูปแบบมาตรฐานสำหรับ Resource Startup
⑫ ชื่อหลัง ensure คืออะไร
โดยทั่วไปคือชื่อ Resource
เช่น Folder
resources/
└── mygarage/
ใช้
ensure mygarage
ไม่จำเป็นต้องใส่ Path เต็มแบบ Windows
⑬ ต้องเขียน resources/mygarage ไหม
โดยทั่วไปไม่ต้อง
ไม่ควรใช้
ensure resources/mygarage
แต่ใช้ Resource Name
ensure mygarage
ให้ FXServer หา Resource ที่ถูก Parse แล้ว
⑭ Resource Folder กับ Resource Name ควรตรงกันไหม
โดยทั่วไป Resource จะถูกอ้างด้วยชื่อ Folder ของ Resource
ดังนั้นถ้ามี
resources/
└── policejob/
จะใช้
ensure policejob
การตั้งชื่อ Folder ให้สั้นและชัดช่วยลดปัญหา Config ผิด
⑮ Folder [cars] คืออะไร
FiveM รองรับ Category Folder ที่ใช้วงเล็บเหลี่ยม
ตัวอย่าง
resources/
└── [cars]/
├── car_a/
├── car_b/
└── car_c/
Folder
[cars]
ทำหน้าที่จัดหมวด Resources หลายตัว
⑯ [cars] เป็น Resource หรือไม่
ตัว Category Folder เองไม่ใช่ Resource แบบเดียวกับ car_a
แต่ FXServer รองรับการอ้าง Category ใน Resource Commands
เช่น
ensure [cars]
เพื่อจัดการ Resources ภายใน Category
⑰ ensure ทั้ง Category ได้ไหม
ได้
Server Commands ปัจจุบันรองรับ Category Names กับ ensure
ตัวอย่าง
ensure [cars]
เหมาะกับ Server ที่มี Resource หลายตัวในกลุ่มเดียวกัน
⑱ ตัวอย่างจัด Resource เป็นหมวด
resources/
├── [core]/
├── [jobs]/
├── [cars]/
├── [maps]/
└── [standalone]/
แล้ว server.cfg อาจใช้
ensure [core]
ensure [jobs]
ensure [cars]
ensure [maps]
ensure [standalone]
แต่ต้องระวัง Dependencies และลำดับการโหลด
⑲ ทำไมลำดับ Resource สำคัญ
Resource บางตัวต้องใช้ Resource อื่นก่อน
เช่นแนวคิด
Database Library
↓
Framework Core
↓
Inventory
↓
Jobs
ถ้า Job Resource เริ่มก่อน Framework ที่มันต้องเรียกใช้งาน อาจเกิด Error
⑳ ตัวอย่างลำดับ server.cfg
ตัวอย่างเชิงโครงสร้าง
ensure database_resource
ensure framework_core
ensure inventory
ensure policejob
ensure ambulancejob
ชื่อข้างต้นเป็นตัวอย่างแนวคิด ต้องใช้ชื่อ Resource จริงของ Server
㉑ Dependency คืออะไร
Dependency หมายความว่า Resource หนึ่งต้องพึ่ง Resource อีกตัวเพื่อทำงาน
ตัวอย่างใน fxmanifest.lua
dependency 'myresource-base'
Resource ปัจจุบันจะมี Requirement ต่อ myresource-base
㉒ หลาย Dependencies เขียนอย่างไร
Manifest รองรับ
dependencies {
'myresource-base',
'utility-resource'
}
นี่ช่วยประกาศ Requirement ไว้ใน Resource เอง แทนที่จะพึ่งความจำของ Server Owner เพียงอย่างเดียว
㉓ Dependency ช่วยเรื่อง Load Order ไหม
ช่วยให้ FXServer รู้ว่า Resource มี Requirement ต่อ Resource อื่น
แต่ผู้ดูแลยังควรจัด Configuration ให้เข้าใจง่าย
เช่น
ensure utility-resource
ensure myresource-base
ensure my_resource
โดยเฉพาะ Server ใหญ่ที่มี Dependencies หลายระดับ
㉔ Dependency สามารถ Require OneSync ได้ไหม
ได้
Resource Manifest รองรับ Runtime Constraint
ตัวอย่าง
dependency '/onesync'
หมายถึง Resource ต้องการ State Awareness/OneSync ตาม Requirement ที่ Cfx.re กำหนด
㉕ Resource Require Server Build ได้ไหม
ได้
ตัวอย่าง
dependency '/server:4500'
หมายถึงต้องใช้ Server Build ตั้งแต่ค่าที่กำหนดขึ้นไป
นี่เป็นอีกเหตุผลว่าทำไม Resource ใหม่อาจ Start ไม่ขึ้นบน Artifact เก่า
㉖ ensure แล้วขึ้น Couldn't find resource
ถ้า Console แจ้งประมาณว่าไม่พบ Resource ให้ตรวจ
Folder มีจริงไหม
ชื่อ Resource ถูกไหม
อยู่ใต้ resources/ ไหม
fxmanifest.lua มีไหม
ชื่อพิมพ์ถูกไหม
อย่า Restart Server ซ้ำโดยไม่ตรวจโครงสร้างไฟล์
㉗ Resource ใหม่ใส่ Folder แล้วต้องทำอะไร
ถ้า FXServer กำลัง Running อยู่ ให้ใช้
refresh
เพื่อ Rescan resources/ และ Resource Manifests
จากนั้นจึง
ensure my_resource
หรือ
start my_resource
㉘ refresh คืออะไร
refresh จะ Rescan Resources Folder และโหลด Resource Manifests ใหม่
ตัวอย่าง
refresh
เหมาะเมื่อเพิ่ง Copy Resource ใหม่เข้า Server โดยไม่ Restart FXServer ทั้งตัว
㉙ refresh เปิด Resource ให้อัตโนมัติไหม
ไม่ใช่หน้าที่หลักของ refresh
มันทำให้ FXServer รู้จัก Resources/Manifests ที่เพิ่มเข้ามาใหม่
หลังจากนั้นจึงใช้
ensure resource_name
เพื่อเปิด Resource
㉚ Workflow เพิ่ม Resource โดยไม่ Restart Server
ตัวอย่าง
Copy Resource
↓
refresh
↓
ensure my_resource
↓
ดู Console
↓
ทดสอบ Resource
เหมาะสำหรับ Development
㉛ ถ้าเพิ่ม ensure ใน server.cfg แล้วต้อง refresh ไหม
ถ้าจะ Restart FXServer อยู่แล้ว โดยทั่วไป Server Startup จะ Scan Resources ใหม่
แต่ถ้าต้องการทดสอบ Resource ทันทีโดยไม่ Restart Server ใช้ refresh แล้ว ensure
㉜ restart resource ใช้เมื่อแก้ Script ได้ไหม
ได้ในหลายกรณี
หลังแก้ Script สามารถใช้
restart my_resource
แทน Restart Server ทั้งตัว
Cfx.re ใช้วิธีนี้ในคู่มือการสร้าง Script เช่นกัน
㉝ ใช้ ensure แทน restart ได้ไหม
ได้ในแง่ว่าถ้า Resource กำลัง Started อยู่
ensure my_resource
จะ Restart Resource
แต่เวลาทำ Development ถ้าต้องการสื่อความหมายชัดว่า Restart อยู่ ก็สามารถใช้
restart my_resource
ได้
㉞ ถ้า Resource หยุดอยู่ ensure จะทำอะไร
จะ Start Resource
นี่คือข้อได้เปรียบสำคัญ
Resource stopped
+
ensure
=
started
㉟ ถ้า Resource เปิดอยู่ ensure จะทำอะไร
จะ Restart Resource
ดังนั้นอย่ารัน ensure Resources ใหญ่ ๆ โดยไม่คิดระหว่างมีผู้เล่นจำนวนมาก เพราะ Resource Restart อาจส่งผลต่อ Gameplay
㊱ Restart Resource กระทบ Player ไหม
สามารถกระทบได้
ขึ้นอยู่กับ Resource
เช่น Restart
Framework Core
Inventory
Character
Database Bridge
กลาง Production อาจทำให้ State หรือ UI บางส่วนผิดปกติ
จึงต้องเข้าใจ Resource ก่อน Restart
㊲ Resource Core ควร Restart กลางเกมไหม
โดยทั่วไปหลีกเลี่ยงถ้าไม่จำเป็น
Resource ที่เป็น Foundation ของ Server อาจมี Resources อื่นพึ่งพาอยู่จำนวนมาก
วิธีที่ปลอดภัยกว่าคือ
แจ้งผู้เล่น
↓
Backup
↓
Scheduled Restart Server
↓
แก้ Resource
↓
Start ใหม่ตามลำดับ
สำหรับการเปลี่ยนแปลงสำคัญ
㊳ Resource เล็ก Restart ได้ง่ายกว่าหรือไม่
มักง่ายกว่า แต่ยังต้องดู Dependency
เช่น Resource UI ขนาดเล็กอาจ Restart ได้โดยมีผลจำกัด
แต่ไม่ควรสรุปจากชื่อ Resource อย่างเดียว
อ่าน Documentation ของ Resource ก่อน
㊴ txAdmin สามารถ Start Resource ได้ไหม
ได้
txAdmin มี Resource Management Interface ที่ใช้
Start
Stop
Restart
Resources ได้
เหมาะสำหรับผู้ดูแลที่ไม่ต้องการพิมพ์ Command ใน Console ทุกครั้ง
㊵ txAdmin Reload & Refresh คืออะไร
ในเครื่องมือ Resource ของ txAdmin สามารถ Reload/Refresh รายการ Resources หลังเพิ่ม Resource ใหม่ได้
แนวคิดเดียวกับการทำ
refresh
ที่ Server Console
จากนั้นเลือก Resource แล้ว Start ได้
㊶ ensure ใช้ใน Console ได้ไหม
ได้
Resource Commands ไม่ได้จำกัดว่าต้องอยู่เฉพาะ server.cfg
สามารถใช้ Server Console
ensure my_resource
เพื่อเปิดหรือ Restart Resource ได้ทันที
㊷ server.cfg กับ Console ต่างกันอย่างไร
คำสั่งใน server.cfg
ensure my_resource
จะถูก Execute ตอน Config ถูกโหลด/Server Startup
ส่วนการพิมพ์ใน Console เป็นการสั่งระหว่าง Runtime
ดังนั้น Production Resources ที่ต้องเปิดทุกครั้งควรอยู่ใน Config ด้วย
㊸ Start ผ่าน Console แต่ลืมใส่ server.cfg จะเกิดอะไร
ตอนนี้ Resource อาจทำงาน
แต่หลัง Restart FXServer มันอาจไม่ถูก Start อัตโนมัติ
จึงควรเพิ่ม
ensure my_resource
ลง Configuration หลังทดสอบผ่านแล้ว
㊹ ensure ชื่อผิดตัวเดียวเกิดอะไร
ตัวอย่าง Folder จริงคือ
my-garage
แต่ Config เป็น
ensure mygarage
FXServer อาจหา Resource ไม่พบ
ชื่อ Resource ต้องตรง
㊺ Linux ต้องระวังตัวพิมพ์เล็กใหญ่
Linux File System มัก Case-sensitive
เช่น
PoliceJob
กับ
policejob
อาจเป็นคนละชื่อ
การตั้งชื่อ Resource ด้วย Lowercase และรูปแบบสม่ำเสมอช่วยลดปัญหา
㊻ Resource ซ้อน Folder ผิดชั้น
ตัวอย่างผิดที่พบบ่อย
resources/
└── my_resource/
└── my_resource-main/
├── fxmanifest.lua
└── client.lua
ผู้ใช้อาจ ensure my_resource แล้วไม่ทำงาน เพราะ Manifest จริงอยู่ลึกอีกชั้น
ควรจัดให้ Resource Root มี Manifest โดยตรง
㊼ ตัวอย่างโครงสร้างที่ถูกกว่า
resources/
└── my_resource/
├── fxmanifest.lua
├── client.lua
├── server.lua
└── config.lua
แล้วใช้
ensure my_resource
㊽ Checklist Resource Start ไม่ขึ้น
ตรวจตามนี้
Resource อยู่ใน resources/
ชื่อ Folder ถูก
fxmanifest.lua มี
Manifest Syntax ถูก
Dependencies ครบ
Artifact รองรับ
OneSync Requirement ผ่าน
refresh แล้วถ้าเพิ่มขณะ Server Running
ensure ชื่อถูก
Console ไม่มี Script Error
Database พร้อมถ้าต้องใช้
เริ่มจาก Error แรกใน Console เสมอ
㊾ ตัวอย่างจัด server.cfg ให้เป็นระเบียบ
ตัวอย่างเชิงโครงสร้าง
# Core resources
ensure mapmanager
ensure chat
ensure spawnmanager
ensure sessionmanager
# Database
ensure database_resource
# Framework
ensure framework_core
# Shared systems
ensure inventory
ensure target_system
# Jobs
ensure policejob
ensure ambulancejob
# Maps
ensure [maps]
# Vehicles
ensure [cars]
# Standalone
ensure [standalone]
ชื่อ Resource ในตัวอย่างบางส่วนเป็นชื่อสมมุติ ต้องเปลี่ยนให้ตรงกับ Server จริง
㊿ สรุป ensure FiveM คืออะไร และเปิด Resource อย่างไร
คำสั่งพื้นฐานคือ
ensure resource_name
และมีพฤติกรรมว่า
ถ้า Resource หยุด
→ Start
ถ้า Resource กำลังทำงาน
→ Restart
จึงเหมาะมากสำหรับกำหนด Resources ที่ต้องทำงานทุกครั้งใน server.cfg
คำสั่งที่ควรรู้ร่วมกันคือ
start resource
→ Start ถ้ายังหยุดอยู่
stop resource
→ Stop
restart resource
→ Restart Resource ที่กำลัง Started
ensure resource
→ Start ถ้าหยุด / Restart ถ้าเปิดอยู่
refresh
→ Rescan resources/ และ Resource Manifests
ถ้าเพิ่งติดตั้ง Resource ใหม่ระหว่างที่ Server Running สามารถใช้
refresh
ensure my_resource
เพื่อให้ FXServer รู้จักและเปิด Resource โดยไม่ต้อง Restart Server ทั้งเครื่อง
สำหรับ Production Server comsiam แนะนำให้จัด server.cfg ตาม Dependency เช่น
Database
↓
Framework Core
↓
Shared Libraries
↓
Inventory / Systems
↓
Jobs
↓
Maps / Cars / Standalone
และหาก Resource มี Dependency จริง ควรประกาศไว้ใน fxmanifest.lua ด้วย ไม่ใช่อาศัยเพียงการเรียง ensure ด้วยมือ
สิ่งที่ไม่ควรทำคือเพิ่ม Resources จำนวนมากแล้วเขียน
ensure [ทุกอย่าง]
โดยไม่ตรวจ Dependencies หรือ Console เพราะเมื่อ Resource ตัวหนึ่ง Start ไม่ขึ้นจะหาต้นเหตุยากมาก
แนวทางของ comsiam สำหรับ Server ที่กำลังพัฒนาคือเพิ่ม Resource ทีละกลุ่ม ใช้ refresh เมื่อเพิ่มไฟล์ใหม่ ใช้ ensure เพื่อทดสอบ แล้วตรวจ Live Console ทุกครั้งก่อนเพิ่ม Resource ชุดต่อไป
เมื่อ Resource ทดสอบผ่านแล้วจึงใส่ ensure ไว้ใน server.cfg เพื่อให้ Resource นั้น Start อัตโนมัติทุกครั้งที่ FXServer เปิดขึ้นมา
Comments
Post a Comment