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

Popular posts from this blog

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

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

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