An actual persistent server is, as ROBLOX doesn’t support that, but you can imitate it as by the examples others have said in this thread. Namely using :SavePlaceAsync()
I was working on something like this a while back.
You can use datastores to store static data under a generated static id (the data you want to persist after shutdown) and memorystore to store temporary data such as the server’s static id and player count under a dynamic id, for which I used the code returned by ReserveServer.
Next you’ll need a way to display a server list. I used messagingservice to send constant pings from the running game servers, which lobbies then caught and displayed. When someone tried to join a server, a ping would be sent to check if the server is trully running (dynamic data might persist if the server crashes). This is actually where I encountered an issue. Messagingservice can throttle, meaning a response might not arrive on time, so you might end up with multiple instances of the same server.
Finally, if you want a genuine persistent server feeling, you can increment actions such as item smelting by comparing the current timestamp to the one before the shutdown.
Thanks! This is very handy. Will tryout soon!