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
จากนั้น
ตรวจ Server Console
เข้าเกม
ตรวจ F8
ทดสอบ Garage
ตรวจข้อมูลใน 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.luaDependency ครบ
ชื่อ 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
Post a Comment