Minecraft Bedrock Edition is the version of Minecraft that powers the iPhone / Android versions (formerly Minecraft Pocket Edition), the Xbox / PlayStation / Nintendo Switch editions and the free Windows 10 Minecraft edition.
Mojang has released a dedicated server which is considered to be in alpha testing. I have found it to be very stable and able to run on a wide variety of hardware.
This script and guide are written to help you get a robust Minecraft Bedrock dedicated server up and running in only a few minutes!
This is the standalone version. The easiest and most problem-free way to run this is using Docker (installed as simply as sudo apt install docker.io): Legendary Minecraft Bedrock Container
I’ve also released a way for Java and Bedrock players to play on the same server using Geyser: Minecraft Java + Bedrock Server Together – Geyser + Floodgate
It’s now possible to convert your worlds between Bedrock and Java versions. Check out my guide on Chunker here for more information.
Features
- Sets up the official Minecraft Bedrock Server (currently in alpha testing)
- Fully operational Minecraft Bedrock edition server in a couple of minutes
- Ubuntu / Debian distributions supported
- Sets up Minecraft as a system service with option to autostart at boot
- Automatic backups when server restarts
- Supports multiple instances — you can run multiple Bedrock servers on the same system
- Updates automatically to the latest or user-defined version when server is started
- Easy control of server with start.sh, stop.sh and restart.sh scripts
- Adds logging with timestamps to “logs” directory
- Optional scheduled daily restart of server using cron
Requirements
- A computer with a 64 bit processor (if you are trying to use ARM read my article on the limitations). 32 bit binaries of the official server are not available so it needs to be 64 bit!
- 1 GB of RAM or higher
- The only officially supported platform by Microsoft is Ubuntu 22.04 / 20.04 (current LTS, recommended)
- Other Linux flavors supported by this script as well as long as they use systemd (for the service). The script assumes apt is installed but there are minimal dependencies so you could install these on another distro (that doesn’t have apt present) and use the script normally.
Recommended Gear
Game Editions
Minecraft: Bedrock Edition is the “Windows 10” version of Minecraft as well as the version of Minecraft on the Xbox / Playstation / Switch. The versions of Minecraft for Android and iOS are also the Bedrock edition.
All of these versions support cross-platform play with each other (but not with the Java edition).
This is the PC Minecraft for Windows 10 (Bedrock) edition of Minecraft. It is able to play cross-platform with other players on Android / iOS / Playstation / Xbox / Switch. Available as a code that is instantly activated to give you permanent access to the game!
Links: Amazon.com*, Amazon.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*
The Sony PlayStation version of Minecraft: Bedrock edition.
Links: Amazon.com*, Amazon.ca*, Amazon.com.au*, Amazon.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.nl*, Amazon.se*, Amazon.sg*
This is the Nintendo Switch version of Minecraft: Bedrock edition.
Links: Amazon.com*, Amazon.ca*, Amazon.com.au*, Amazon.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.nl*, Amazon.pl*, Amazon.se*, Amazon.sg*
This is the Microsoft Xbox version of Minecraft: Bedrock edition.
Links: Amazon.com*, Amazon.ca*, Amazon.com.au*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.nl*, Amazon.sg*
Recommended Storage (Solid State Drive)
I strongly recommend a Solid State drive (SSD) for your server. This is because Minecraft is constantly reading/storing chunks to the disk which makes I/O performance very important.
These are much cheaper than they used to be. Here’s a decent 120 GB one (higher capacity options are available) at a very low price:
The Kingston A400 is reliable, widely available around the world, has low power requirements and performs very well. It’s also very affordable. This drive has been benchmarked over 1000 times at Pi Benchmarks and is the #1 most popular SSD among the community!
Links: AliExpress*, Amazon.com*, Amazon.ca*, Amazon.com.au*, Amazon.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.nl*, Amazon.pl*, Amazon.se*, Amazon.sg*
If you have a M.2 NVME slot in your motherboard you can go with a high end drive. This will give your server maximum performance even if a large number of players are running around on the server changing blocks and triggering disk writes.
This is the one I have in my machine. These range from 250 GB to 2 TB depending on how big your server might grow:
The Samsung 980 Pro (NVMe) is a professional grade SSD and one of the fastest in the world. The Samsung NVMe drives have been at the top of this category for a long time and are well trusted for both their performance and reliability / long life.
Links: AliExpress*, Amazon.com*, Amazon.ca*, Amazon.com.au*, Amazon.co.jp*, Amazon.co.uk*, Amazon.de*, Amazon.es*, Amazon.fr*, Amazon.it*, Amazon.nl*, Amazon.pl*, Amazon.se*, Amazon.sg*
Computer / CPU / Memory
Almost any PC made in the last few years will be a x86_64 bit computer. If you have an older computer around that isn’t being used then it will most likely have the right CPU and amount of memory (as well as fast storage) to run a basic server.
Throwing a SSD in one of these older computers will provide an excellent server experience for small and larger player counts.
The speed of your storage will make the largest difference. Older HDDs are going to have significantly slower performance than any modern SSD even with all other hardware equal. This is because the Minecraft server is constantly reading/writing chunks of your world as well as updates to it to the disk so this tends to be the bottleneck.
Operating System
I highly recommend using Ubuntu Server to run the Minecraft dedicated server. It is available here.
At the time of writing the current version is Ubuntu Server 20.04. This is a secure and robust operating system and will leave plenty of resources available for the server to run.
The script should run on any Debian based flavor of Linux but since the Minecraft Bedrock server is compiled natively for Ubuntu I recommend sticking with it. If you have a GUI flavor of Ubuntu and a decent PC (>= 2 GB of RAM) the server will work just fine on it.
Note: People have reported in the comments that Ubuntu 16.x is no longer working with the latest official Mojang binaries. Ubuntu 18.04 is the minimum requirement for the latest versions, and 20.04 is recommended!
Installation
Log into your Linux server either using SSH or a mouse and keyboard and paste/type the following command:
curl https://raw.githubusercontent.com/TheRemote/MinecraftBedrockServer/master/SetupMinecraft.sh | bash
The script will setup the Minecraft sever and ask you some questions on how to configure it. I’ll explain here what they mean.
The first question will be the installation path. This is the root installation path for ALL servers you will have. If you add additional servers later you should select the exact same installation path. It should always be left as the default (~).
The only exception is if you have something like a completely dedicated disk for the Minecraft server. In that case you should always use the same root path of /mnt/yourdrive or wherever the path is for every new/additional server you install.
“Start Minecraft server at startup automatically (y/n)?” – This will set the Minecraft service to start automatically when your server boots. This is a great option to set up a Minecraft server that is always available.
“Automatically restart and backup server at 4am daily (y/n)?” – This will add a cron job to the server that reboots the server every day at 4am. This is great because every time the server restarts it backs up the server and updates to the latest version. See the “Scheduled Daily Reboots” section below for information on how to customize the time or remove the reboot.
That is it for the setup script. The server will finish configuring and start!
First Run
The server will start up and start displaying output to the console.
[2019-03-30 20:25:12 INFO] Starting Server
[2019-03-30 20:25:12 INFO] Version 1.10.0.7
[2019-03-30 20:25:12 INFO] Level Name: Bedrock level
[2019-03-30 20:25:12 INFO] Game mode: 0 Survival
[2019-03-30 20:25:12 INFO] Difficulty: 1 EASY
[2019-03-30 20:25:20 INFO] IPv4 supported, port: 19132
[2019-03-30 20:25:20 INFO] IPv6 supported, port: 19133
[2019-03-30 20:25:23 INFO] Server started.
Once you see the “Server started” line you will be able to connect from the client.
To add the server to the client open Minecraft and click “Play”. Then at the top of the screen select the “Servers” tab and click “Add Server”.
This will ask you for a Server Name and Server IP Address. For the name you can put anything and for the server IP address put the address of your Linux server. Leave the port as the default 19132. For more information on how to let people from outside your network on go to the “Port Forwarding” section below.
Now choose the server you just added in the list and connect!
Start, Stop and Restart Server
The server can be started, stopped and restarted two different ways. You can use the provided scripts in the Minecraft folder or you can use systemctl. Here are the commands:
cd ~/minecraftbe ./start.sh ./stop.sh ./restart.sh -OR- sudo systemctl start minecraftbe sudo systemctl stop minecraftbe sudo systemctl restart minecraftbe
Automatic Backups
The server backs up each time it starts. This helps you recover easily if something goes wrong. This system works best if you configured the server to restart daily since it means you will have a backup every day.
To access these backups type:
cd ~/minecraftbe/backups
ls
When a backup is made the filename will be the date and time the backup was taken. If you need to restore a backup it’s very easy. Substitute the timestamp in my example to the backup you want to roll back to. Type:
cd ~/minecraftbe ./stop.sh rm -rf worlds tar -xf backups/2019.02.15.22.06.30.tar.gz ./start.sh
Your world has now been restored! It’s a good idea to download these backups off the server periodically just in case the server’s storage fails.
Installing Resource Packs / RTX Support
For instructions on how to install resource packs (including optional RTX support) view my step by step Minecraft Bedrock Dedicated Server Resource Packs guide here.
Scheduled Daily Reboots
The daily reboots are scheduled using cron. It’s very easy to customize the time your server restarts.
To change the time that the server restarts type: crontab -e
This will open a window that will ask you to select a text editor (I find nano to be the easiest) and will show the cronjobs scheduled on the server. The Minecraft one will look like the following:
0 4 * * * /home/ubuntu/minecraftbe/restart.sh
There are 5 fields here. The default restart time is set to reboot at 0 minutes of the 4th hour of the day (4 AM). The other 3 fields are left as * to represent every day of every month. Make any desired changes here and press Ctrl+X to exit nano and update the cronjob.
To remove the daily reboot simply delete the line and save.
Reconfigure / Update Scripts
The scripts can always be reconfigured and updated by downloading the latest SetupMinecraft.sh and running the installer again. It will update all of the scripts in the Minecraft directory and reinstall the startup service for you.
Running SetupMinecraft.sh again will also give you a chance to reconfigure options such as the memory dedicated to the server, daily reboots, starting the server on boot, etc.
This will not overwrite your world or any other data so it is safe to run!
Port Forwarding
If everyone on your server is on the same LAN or WiFi network as you then you don’t need to do this. If you want people to connect from outside your local network then you need to set up port forwarding on your router.
The process for this is different for every router so the best thing to do is just look at your router and find the model # and put that in google with port forwarding for easy instructions on how to do it for your specific router.
You want to forward port 19132. The type of connection is both TCP and UDP. On some routers you need to do both a TCP entry and then a second entry as UDP.
Once you do this people will be able to connect to your Minecraft server through your public IP address. This is different than your local IP which is usually a 192.x.x.x or 10.x.x.x. If you don’t know what that is just go to google and type “what’s my ip” and Google will kindly tell you!
Version Override
You can revert to a previous version with the revert.sh script included in your directory like this:
james@jamesgigabyte-linux:~/minecraftbe/james$ ./revert.sh Set previous version in version_pin.txt: bedrock-server-1.19.10.20.zip
If you have a specific version you would like to run you can also create version_pin.txt yourself like this:
echo "bedrock-server-1.18.33.02.zip" > version_pin.txt
The version hold can be removed by deleting version_pin.txt. This will allow it to update to the latest version again!
Wired vs. Wireless
Going with an ethernet (wired) connection is going to be faster and more reliable. There’s so much wireless traffic and other interference in the air that running your server on WiFi is not recommended.
Even if it is working great 99% of the time it can ruin your experience very quickly if the WiFi drops for a couple of seconds and you get blown up by a creeper!
All that being said, the server works fine on wireless. The script will work fine as is with a wireless connection.
Benchmarking / Testing Storage
If you’re getting poor performance you may want to run my storage benchmark with:
sudo curl https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash
PC results won’t show up on the site yet (it’s meant for Raspberry Pi) but it will run on Linux just fine and give you a score. If you search for the model of your drive on Pi Benchmarks you can compare your score with others and make sure the drive is performing correctly!
Troubleshooting Note – Oracle Virtual Machines
A very common problem people have with the Oracle Virtual Machine tutorials out there that typically show you how to use a free VM is that the VM is much more difficult to configure than just about any other product / offering out there.
It is because there are several steps you need to take to open the ports on the Oracle VM. You need to both:
- Set the ingress ports (TCP/UDP) in the Virtual Cloud Network (VCN) security list
- *and* set the ingress ports in a Network Security Group assigned to your instance
Both of these settings are typically required before you will be able to connect to your VM instance. This is purely configuration related and has nothing to do with the script or the Minecraft server itself.
I do not recommend this platform due to the configuration difficulty but the people who have gone through the pain of configuring an Oracle VM have had good experiences with it after that point. Just keep in mind it’s going to be a rough ride through the configuration for most people.
Troubleshooting Note – Hyper-V
There is a weird bug in Hyper-V that breaks UDP connections on the Minecraft server. The fix for this is that you have to use a Generation 1 VM with the Legacy LAN network driver.
Conclusion
The Minecraft Bedrock Edition dedicated server runs much better than previous third party servers in the past that were missing critical features. The performance is very good even on low end hardware. It has never been easier to set up a Minecraft Bedrock server.
If you have any feedback or suggestions let me know in the comment section. A lot of the changes and developments in this script and guide are directly from readers.
Have fun!
Other Resources
For a guide on how to set up resource packs check out my Minecraft Bedrock Resource Pack guide
If you’re trying to run this on the Raspberry Pi check out the Raspberry Pi specific guide here
Wow this is great! If I already have a BDS server in Ubuntu, should I run the script as normal, then copy the contents of my old worlds folder to the worlds folder in the new directory, then add the old worlds name to server.properties?
Have you have any luck with high render distance? I have view distance set to 60 on my server and the performance is great, but it crashes and corrupts the world every few days.
Thank you!
Hey Will,
Great question! Yes, you can do exactly that. I was going to mention the only thing to watch out for is to make sure that you adjust your server.properties file accordingly but it looks like you’re prepared for that.
Wow, I have never heard of anyone doing something like view distance 60! I would expect the client to be more of a problem in those situations as the client has to actually render it whereas to the server it’s just raw data (but a *lot* of raw data to both retrieve from disk and then send over the network to all players in the area). I’d expect your bottlenecks to be networking and disk.
Given that you are experiencing disk corruption / world corruption I’d say it’s very likely you need some kind of storage upgrade. Given the bottlenecks I outlined earlier you would want something like a high performance NVMe SSD. You would especially not want a HDD. Even a 2.5″ SATA SSD will bottleneck though as SATA can only do 6GB/s and retrieving and sending that many blocks can easily add up to this.
Remember that when you set the view distance to 60 it’s not actually just 60 blocks/chunks. It’s actually 60 squared. It has to send all the blocks in *every* direction out to 60 if that makes sense. The load literally increases exponentially as you raise this # for this reason.
I’d say you’d probably want something like a Samsung 980 Pro NVMe setup or some really high speed NVMe setup to maximize the view distance without getting corruption. If I were to guess the corruption is from the disk “queueing” which means it has a bunch of operations that need to be written to or read from disk but it is behind. If this queue stacks up high enough and things crash then you will often be left with a server that had a bunch of really important pending writes that never happened (thus the corruption).
You may want to run my disk benchmark at pibenchmarks.com and see how high of performance you’re getting out of that drive (it’s okay to run if it’s a PC it just won’t show in the browser part of the site). On a x86_64 PC you’d probably want a score of like 40000-50000 or higher to be able to get the absolute furthest view distance you can. This is for sure the furthest I’ve ever heard of and I don’t know how many people have tried one quite this high. I’m sure that looks amazing in game.
At any rate you should be totally fine to do what you are saying here to get it set up. Restoring a backup with the automated backup system built into this basically works the same way (you install a blank server then you extract the backup over the top of it basically). Hopefully that helps!
Thank you for the reply! We do have newer gaming computers, so there is never any lag. I also tried a render distance of 50, but still had corruption after a few days. I upgraded the server today to a much faster PC (5900HX) with NVME SSD and also plan to give your code a test. I am hopeful it will fix it. Do you think the the corruption could also be due to one of my friends having DSL internet with a very high ping and by having a high render distance?
Is playing Java edition with optifine really the only way to reliably get very high view distances? Thanks again, I am going to send something to your Paypal because you are awesome!
Hey Will,
No problem at all, you are definitely welcome! When you say you are getting corruption what is happening exactly? Will the server not load? What error is it giving when it won’t load exactly?
Typically I wouldn’t expect networking issues (even extreme lag) to cause this but it’s certainly possible. We have seen some cases of rare and strange Bedrock bugs in the past that this case kind of reminds me of. If you give the exact error I should be able to search and find some examples of this. Basically though if you have an error code or anything like that (if you don’t my script will at least give you log files so there’s a record of it) it should tell us more about exactly what is going wrong.
It’s also possible your disk might be corrupted and need a fsck ran on the drive or a reimage. I’ve seen some cases like this but we won’t jump to that conclusion until we take a closer look at what errors you are getting!
Sorry to say I am still getting corruption even after changing hardware and using your code. Previously the server would crash with an error code stating unable to read .db file. Now the server crashes with the following log:
[2022-04-20 20:06:32] CrashReporter Key: 8c4937c1-64cb-3532-a8dc-1deb28f67293
[2022-04-20 20:06:32]
[2022-04-20 20:06:32] Crash
[2022-04-20 20:06:32] [2022-04-20 20:06:32:651 INFO] at clone (UnknownFile:?)
Failed to open curl lib from binary, use libcurl.so instead
[2022-04-20 20:06:33] 5ae507cf-1765-4f8d-9a2a-edf216dfd916
This save works fine in offline and does not register as corrupt. The server was working perfectly until it crashed. No lag or anything. I do have the view distance at 50, but the NVME in the server scored something like 30k in the RPi test. I did get an error message after installing your code, but the it still seemed to work. The error was after the line “Setting server file permissions” and stated: “tail: cannot open ” for reading: No such file or directory”
Any ideas on what to try? If you think it is the view distance to high, what is a reasonable setting?
Hey Will,
There are two possibilities. Bedrock server is missing the chmod +x on the file or your partition is corrupt. My guess is it’s the latter from how much you’ve tried plus even if it were the missing permissions my script would have automatically corrected it (and any other permission errors).
We’ve definitely seen this before. Check out this thread here for an example of where that error was fixed by permissions: Permissions Fix
Check out this issue on world corruption on my GitHub project page (I spent like, days or weeks troubleshooting this with this person here): World Corruption #1
Here was another one that went for ages until they accepted their installation/partition was corrupted and reinstalled and it was fantastic afterward: World Corruption #2
Bottom line for this one is that the OS or disk partitions are corrupted and I strongly recommend a full clean reinstall with the latest version of your OS. If you check through the links I posted every single one of them was just basically a journey until they finally did a reimage and then they never had a problem again if that makes sense. Definitely your exact symptoms and error message (wrestled with that one a lot over the years). You have basically double confirmed this by checking the actual server files on another machine / in game using offline mode / etc. and verifying there’s nothing wrong with the server files.
It’s likely that this damage happened before you’d made all of your fixes / changes. You can sometimes fix these by running fsck on the drive but pretty much nobody I linked to was helped by anything less than a reimage. Hopefully that helps and sorry for the bad news! The good news is I bet your server is just fine and that this is a OS disk level issue.
A few times over the years the disk has actually been bad but given that you said this is a NVMe drive I think that’s extraordinarily unlikely and that this is typical disk corruption that occurs during nasty crashes or if power is lost during a write. I imagine a reinstall will get everything working perfectly!
Both servers were fresh installs, the old server had the latest version of Mint, the new one has Ubuntu Server 20.04. Could it be due to the fact that both machines came pre-installed with Windows 10, though it did wipe the partitions when I installed Ubuntu from a flash drive? I am using Rufus on Windows to make the boot drives. Should I try the following: Recreate the Ubuntu installation media using a different software, such as Balena Etcher, then boot using the USB, wipe the NVME, then install? Thanks again!
Hey Will,
Precisely yes! So the partitions being destroyed issue is strange. I’ve ran into this issue before with Etcher on my Raspberry Pi stuff a lot. It turns out it doesn’t actually completely wipe the partitions and strange things can happen for sure.
I actually documented this issue with Etcher when I was having trouble with preexisting partitions not being wiped out at the end of this article in the further troubleshooting section: Goldshell BOX ASIC Miner Firmware Recovery Guide. In that case I ran the SD card association’s formatting tool to clean it but you just need to similarly fully 100% actually wipe the NVMe SSD and give it completely clean partitioning. The manufacturers of the drive often give these SSD cleaners out too such as Samsung with Samsung Magician, etc.
The best way to do it would be to create the USB boot media (should be fine to make these on Windows) and wipe the NVMe clean. I typically use Win32DiskImager when I’m using Windows but I use Etcher from time to time as well (I feel like I have less trouble with the Ubuntu installers when I use Win32DiskImager).
For wiping the NVMe in a lot of systems the BIOS/UEFI system menus will usually have an option to wipe them (if this isn’t a machine you built yourself) at the firmware level (the best way to ensure it’s actually clean and arguably the only way outside of the drive manufacturer’s tools). HP, Dell, and the other major manufacturers have variations of this built in that I frequently use as they’re also quite fast usually only taking a few minutes.
There are also a lot of available boot and nuke CDs out there that will wipe and trim a SSD as well (or you can just use a Linux boot CD if you’re comfortable with CLI) if no other options are convenient. Wiping out the entire partition table of the drive and saving your changes should do it (something like a “clean all” command in Windows diskpart) or from a Linux boot disk something like fdisk and actually just delete everything so the disk is completely blank (including the partition table).
Basically your goal is that when you go to install Linux from your created boot media it should see *nothing* on the disk. It should be completely blank with no preexisting partitions to even tell to overwrite/remove. If there are any quick vs. full format options choose the full format / erase option. This still isn’t as good as running the manufacturer’s tools on the drive to wipe it but it should be good enough to fix this problem. We just want to make sure any crud or pieces of left behind data is zero’d out or overwritten.
I think it’s very likely that some sort of weird partition issue is going on. Your symptoms are the “reverting permissions” where bedrock_server is losing it’s +x permissions while it’s running which is due to disk strangeness. I think you may be onto something with the Windows partitioning beforehand. Maybe there’s some hidden data left behind in odd parts of the disk. Who knows. I’ve seen some strange things over the years especially with ones that had been formatted with something like zfs beforehand (I think one of the threads I linked to was this and I’ll never forget it).
A clean wipe (harder to achieve than it sounds) fixes it on the Pi, has fixed it on my servers and others here and will fix it on there as well for sure!
I fully erased the USB and NVME using Gparted in Linux, then reinstalled Ubuntu Server 20.04.4. Sorry to say I am still getting the same crash as above. View distance is set to 32 and tick to 10.
Hey Will,
Oh wow, that is a tough one for sure. Okay, so what we need to do now is narrow some things down.
Do you have any old backups of your server from before this started happening? One test worth doing is restore the oldest backup you have and see if this changes the behavior at all.
The other test to do is try spinning up a completely new and fresh server. Try setting the settings right away on one run and see if you can reproduce the crash. If you can’t then it would point to that server actually being corrupted somehow (very rare for Bedrock, almost unheard of but we have had maybe 2-3 of these posted about on the site vs. dozens in the same time period for Java). If you can then you may have discovered a new Bedrock bug! At the very least we will know where the problem is exactly.
Another test you should do related to the previous one is try spinning up your *existing* server without setting any of the settings and see if it runs stable. This is a test you may have done already.
Basically we need to determine if this is related to your settings or if this is related to your actual server data files (meaning they’re corrupted potentially). I’m honestly not sure which it is going to be. I am surprised it is manifesting as this issue as this had *never* been settings related in the past but it’s certainly possible. Maybe if the disk can’t keep up the failure manifests in a way that closely mimics the disk corruption issue (if the disk is far enough behind maybe the symptoms would be essentially the same).
You did the offline mode test so I didn’t think things were going to go this way but there are some types of problems that may not manifest in an offline world. This is mostly related to storage of stuff related to multiplayer which isn’t really used in offline mode but is still present in the data files. If this is where the problem is then in rare cases since the problem is in the multiplayer parts that aren’t used offline it can make it appear that the world is intact when really the corrupt parts aren’t being accessed in offline mode (rare, but we’re in rare territory already that you’ve gone this far and it’s still happening so we have to look at all the possibilities and narrow them down).
I’m getting the feeling it is corrupt. I reviewed some older threads again and found this one. He even filed an official bug report for this that he links to. This was one of the cases that looked identical to yours and he started using my script because he got this issue and had no backups and it was a total loss. He wanted to use the script to have the automatic backups to prevent against this basically but that was one of the cases where the world was dead and the crash is also identical.
I can’t remember if you said you’ve tried starting fresh servers before (I feel like you have but I linked and looked at so many old threads that now I’m doing double takes making sure I’m not confusing any of these). I would definitely be curious if a fresh server corrupts again now that you’ve done the reinstall. It’s possible that the problem had just already occurred and now your server is corrupted essentially even though we’ve fixed the underlying causes. It’s also possible that your settings are straining/breaking Bedrock in a way that you will be able to reproduce with those settings even on a fresh server.
Does your output look exactly identical? Let’s see if we can narrow it down. There’s only a couple of possibilities left (honestly I think the two I just covered) unless it’s something totally unseen before (which *that* has definitely happened before). Let me know what you find!
I hesitate to say it’s fixed, but I found something that causes it to not give that exact same error as above. It was still giving me the exact error above even after full erasing the hard drives and using low settings. I tried ./fixpermissions.sh to fix permissions serveral times but it would still crash within 30 minutes. Instead I ran “sudo ./fixpermissions.sh” and it has not crashed in 18 hours with multiple people playing.
Hey Will,
That’s at least a promising start! I for sure would not say it’s fixed either. It definitely makes sense that it could have been permissions related. The sudo is necessary for it to take ownership so it would make sense if this actually did make a difference.
Let’s keep an eye on it but this sounds a lot more like what we should be seeing here with your fresh install and all of the checking / troubleshooting we did. We’ll cross our fingers that it’s all set!
Hello again, it’s been smooth sailing the last month with no issues! Happy to report whatever was causing the crash is now fixed. The new revert function is very useful and I was able to set everything back up immediately after the new preview release. I noticed you said we should revert back to the last backup if we opened with the new server version, do you know when the beta update was pushed? I have been out for a few days. It looks like it was released 5/25, but I am not sure if I should use the backup from 5/25 or 5/24 at 4AM EST.
Nm I followed the logs and found my answer. Thanks again
Hey Will,
Excellent, I’m glad everything is still going well other than this hiccup you were able to resolve!
For anyone else struggling with this there’s a couple of reasons this can happen. The main thing to keep in mind is if you are going to go back in versions you should restore a backup from *before* you ever ran the new version.
The reason for this is that Minecraft updates the data structures with features from the new version. The old version can’t understand these and will crash. There’s no way to really get the changes back out other than restoring a backup.
This can also be related to permissions errors but the logs will often reveal things like this. Thanks Will and stop by any time!
Hi, how do I make myself an operator of the server
Hey ian,
To do that you can open the console by typing “screen -r” and then type “op yourplayer” in the console. That should take care of it for you!
Hi,
thank you very much for your tutorial! I managed to set up a server and now I am playing around with multiple instances. It sort of works, but when I restart the server (the main PC) not all instances start up. I configured them with different names and ports and as such it works. Only the start-up is somehow buggy.
Is there something I need to change to make it more reliable?
Best regards,
Sebastian
Hey Sabestian,
That’s a common Bedrock server bug unfortunately. I think the best way to fix it is to not use the default ports on any of your server. The order in which you start them can impact it as well.
People have had luck not using the default ports 19132 and 19133 on *any* of the servers. That’s the first thing I’d try for sure!
James,
I have just copied my rPi 4 from SD card to USB/SSD.
Minecraft no longer runs.
Your startup script completed, and the server started, but did not complete.
Any ideas what I might have done wrong?
Here is the log:
[2022-03-23 12:20:54] NO LOG FILE! - setting up server logging...
[2022-03-23 12:20:54] [2022-03-23 12:20:54:919 INFO] Starting Server
[2022-03-23 12:20:54] [2022-03-23 12:20:54:922 INFO] Version 1.18.12.01
[2022-03-23 12:20:54] [2022-03-23 12:20:54:922 INFO] Session ID b8d471ac-9b77-4771-875e-4803cd2b326f
[2022-03-23 12:20:54] [2022-03-23 12:20:54:951 INFO] Level Name: Bedrock level
[2022-03-23 12:20:54] [2022-03-23 12:20:54:992 WARN] 'whitelist.json' will be deprecated. Please migrate to 'allowlist.json'.
[2022-03-23 12:20:54] [2022-03-23 12:20:54:006 INFO] Game mode: 0 Survival
[2022-03-23 12:20:54] [2022-03-23 12:20:54:007 INFO] Difficulty: 1 EASY
[2022-03-23 12:20:55] [2022-03-23 12:20:55:111 INFO] opening worlds/Bedrock level/db
[2022-03-23 12:20:55] [2022-03-23 12:20:55:120 ERROR] DBStorage chain is invalid. Possibly encryption-related, or bad DBStorageConfig passed. Reason: Unable to decipher/decrypt LevelDB.
[2022-03-23 12:20:56] [2022-03-23 12:20:56:744 ERROR] Network port occupied, can't start server.
[2022-03-23 12:20:56] [2022-03-23 12:20:56:745 INFO] Server stop requested.
[2022-03-23 12:20:56] Quit correctly
Regards
justin
Hey Justin,
It looks like the server is already running. You got an error saying the port is already in use and that the files can’t be opened already (they’re already on there).
screen -r should bring up any other servers running in the background. You could also change the default ports if you’re positive that it’s not already running but there are 2 indicators that it is running. The port file and the leveldb file can’t be decrypted because it’s already opened. If it really isn’t running the server backup may be corrupted but I don’t get the sense this is the case.
I’d probably run SetupMinecraft.sh again and then reboot the Pi completely and see if you can get it to start up. It looks like it is running somewhere or it’s trying to use a port that is already in use. Hopefully that helps!
Thanks for the guide. I set it up flawlessly in December with two servers that were running with little issue. Then one of the servers started to say it was full when there were no players on it. The fix was to restart it. However, recently, I ran into the issue that the servers won’t start up at all. When I run the ./start command it acts as if it is starting, but when I try to connect with the screen command there are no sockets running.
I also downloaded and created a new server in another directory. That worked fine, but when I restarted that server, I got the same results. I assume the issue must be with my Ubuntu setup, but I’m really quite a novice at Linux. These minecraft servers are really the only thing running on the server computer. Any help troubleshooting would be great. I’ll post the text from putty below. Thanks.
xxxx@wardsrockserver1:~/minecraftbe/wardsrock_survival$ ./start.sh
Backing up server (to minecraftbe/wardsrock_survival/backups folder)
worlds/
worlds/Bedrock level/
worlds/Bedrock level/level.dat_old
worlds/Bedrock level/levelname.txt
worlds/Bedrock level/db/
worlds/Bedrock level/db/005385.ldb
worlds/Bedrock level/db/MANIFEST-005632
worlds/Bedrock level/db/005626.ldb
worlds/Bedrock level/db/005624.ldb
worlds/Bedrock level/db/005633.ldb
worlds/Bedrock level/db/005628.ldb
worlds/Bedrock level/db/005634.log
worlds/Bedrock level/db/005498.ldb
worlds/Bedrock level/db/CURRENT
worlds/Bedrock level/db/005625.ldb
worlds/Bedrock level/level.dat
Checking for the latest version of Minecraft Bedrock server ...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 307k 0 307k 0 0 328k 0 --:--:-- --:--:-- --:--:-- 328k
Minecraft Bedrock server is up to date...
Starting Minecraft server. To view window type screen -r wardsrock_survival
To minimize the window and let the server run in the background, press Ctrl+A then Ctrl+D
xxxx@wardsrockserver1:~/minecraftbe/wardsrock_survival$ screen -r wardsrock survival
There is no screen to be resumed matching wardsrock.
Hey Tom,
It looks like there may be a space in the server name. Before trying anything else I would try installing it without the space. You can theoretically just copy all of the files from the old folder into the one without the space afterward.
The other thing I would check is that you should make sure you delete SetupMinecraft.sh and use the latest version of it as there have been some changes for sure. This may take care of it as well for you.
Did you check the logs folder by chance? It’s difficult to say if it’s starting up and finding an error but the log file usually will help in this situation. The error doesn’t look like it’s happening in start.sh as everything looks normal there. That means the logs file should give us a hint of what is going on. If you would be willing to post some output from there we should be able to diagnose exactly what is going on!
It looks like the problem was in the save file. I deleted the Worlds directory, and It has been running fine since. fortunately the kids have only logged a few hours in the previous save.
Hey Tom,
Great, I’m glad you were able to find the issue! There have been a few issues like this recently and about half of them were related to something like this but there have been other issues that have even required me to make changes to the scripts so I wasn’t completely sure without checking all of the possible places.
Thanks for leaving your resolution/outcome, definitely stop by any time if you have anything else come up!
Hey There! I have the same issue as Tom. The kids in the family try to connect to the creative server(the first and primary instance) and it gives the same “Server is full” message. I previously spun up a second instance for survival mode for the older kids and I, using 19134/tcp and 19135/udp for the second as the first was using the default ports, and it worked fine for a while but then the original server started give the aforementioned error, saying the server was full. I’d check and it wasn’t even running, stating that it failed to run with “error-code” as the error. The logs for each failure state the same message:
[2022-03-25 04:39:37] [2022-03-25 04:39:37:578 ERROR] Network port occupied, can't start server.
[2022-03-25 04:39:37] [2022-03-25 04:39:37:578 INFO] Server stop requested.
[2022-03-25 04:39:37] Quit correctly
I check and there is nothing listening on those ports at that time. Rather confusing.
There are no spaces in the server name: “kidsmcserver”.
If I systemctl stop {2nd-server-name} and then systemctl start kidsmcserver, all is well. As a result I’m going to go remove the second server from the Cron job and hopefully just keep the second server offline and out of the way. But any ideas on what I can do here? I’m not sure what deleting or changing with the worlds directory will help with.
Thanks!
Here is what i’m seeing in the crontab:
0 4 * * * /home/jake/minecraftbe/kidsmcserver/restart.sh
0 4 * * * /home/jake/minecraftbe/kidsmcserver/restart.sh 2>&1
0 4 * * * /home/jake/minecraftbe/Surv1v3/restart.sh 2>&1
I’m not sure why the first server in in there twice, and I don’t know what “2>&1” means. I shall go google it but incase it helps with anything, there it is.
Thanks!
Hey Jake,
I’d remove the first line in there (that looks like an older line from the upgrade). That’s the one that stands out to me. 2>&1 means to redirect output direction to the console. Without that it won’t capture errors and sometimes won’t run the task correctly.
It does look like it’s trying to run the server twice which would explain why it’s throwing a port is already in use.
Just delete that first line or you could actually delete all of them and run SetupMinecraft.sh again for each server to set it up completely from scratch.
I think you are on the right track here, let me know how it goes!
Hey James, i have some trouble.
My Server dont find the directory sbin/route and always try to get it. and i dont hace the directory route. can you help me please?^^
Hey Dekosha,
I thought I had fixed this issue as I added the PATH variable to the top of each script to prevent having to have these qualifiers. I’ve definitely seen this issue before for sure. It happens on certain OS’s that don’t have the route command in the same place as Ubuntu. I’ve committed a fix to GitHub!
Can you try installing again (by running SetupMinecraft.sh, it will safely update the scripts to the latest ones from GitHub) with the latest version and verify this is resolved? Thanks!
i try it two times. no i get the failure, that the network interface not up. what does it mean?
Hey Dekosha,
That should be fixed in the latest version. Is this a brand new install? Usually it means it can’t find the “route” command on your system. If you type “route” in a Linux terminal does it tell you command can’t be found?
It wasn’t too long ago that I removed the hard coded “/sbin/” in front of the route command. You could try putting that back in front of the route command in start.sh as a test to see if it will start with that. That would mean that “route” is indeed on your system (it should be) but that the directory the program is in isn’t included on your user’s $PATH variable. This means you would basically go to the line in start.sh that has “route” in it and change it to /sbin/route to test this. If this works let me know as it will impact how I approach fixing this.
Maybe I’ll change the network detection altogether but it’s not easy to find one that will work on all Linux systems. Even a command as basic as “route” which is basically a core networking utility isn’t guaranteed 100%. Maybe I should try doing a curl to icanhazip.com (except then this is prone to DNS failures, but if you’re having DNS failures you shouldn’t be able to resolve GitHub.com either). Curl is a dependency that is installed by the script so I would 100% know it’s there and on the path at least otherwise they wouldn’t have been able to install in the first place.
I could also probably just put /sbin/ on the PATH as the PATH variable is set at the top of each script. It depends on what the actual problem ends up being here.
Can you take a look at those and we’ll see if we can get it going for you!
James! I adore this guide, (I’m particularly fixated on not having to update manually, easy to scale, but also the nearly 0-decision/guesswork scripting!
However it’s secretly killing me as I just can’t get anything to connect, and until I do, my 6 year old daughter and her friends won’t stop creating worlds for 8 people from their wifi ipads while their parents dual-stream netflix 🙂
At the same time, I think you could add value to your guide by including a guide to using Oracle’s free cloud ubuntu servers. Because free is free, and 24/7 power ain’t always cheap 🙂
I tried using this guide from reddit (in case the link doesn’t make it to the post, it’s a reddit post called how_to_create_a_free_minecraft_bedrock_server)
First I followed their instructions right up to the download, just to get the oracle VM up, then installed with your download link and went forward from there.
I can’t remember all the roadblocks I hit in the last couple weeks, there were a few. If there’s a log I can grab for you, happy to provide that if you can point me where to find it. I’ll list my trials/errors at the bottom if you want all that hacky after-thought level of detail.
But no matter what I;ve tried, I get “Unable to connect to world” adding the server to my gaming pc (that has no issues connecting to my daughter’s ipad, her friends, or coworker’s dedicated windows box). I’m using the cloud vm’s public IP for the server and port19132.. I can ping the ip, the port 19132 settings are enabled from the oracle config AND in firewalld, the service is up and running.
This LOOKS like the issue, but nothing I found via google in ubuntu or oracle’s settings makes any difference, (even when they solve an actual error message on the server.)
Test-NetConnection -ComputerName "X.X.X.X" -InformationLevel "Detailed" -Port 19132
WARNING: TCP connect to (X.X.X.X : 19132) failed
WARNING: Ping to 1X.X.X.X failed with status: TimedOut
I’m a linux amateur, but I’ve done my share of windows scripting, so I have a rough idea of what the commands are doing, and why services/permissions might not be working, but half the time I don’t know how to check, or what would look out of the ordinary in the first place.
Unless you have any really obvious ideas, Before deep diving any further,
I’m HOPING I could convince you to try it out in oracle cloud using your scripts, and see if you have any problems, so I know whether to keep beating my head against the (fire)wall or not! I guess instead of 8000 words I should have just asked that, but maybe you’ll feel sympathy for my struggles 🙂
Kudos for the guide though, I’ve been super-excited to make this work for like 2 weeks since my daughter got sick! It’s literally the only one I’ve seen that I refuse to give up on.
Some issues/troubleshooting:
I wanted a different username than the default oracle ‘forced’, so I had to use chown to get some extra permissions and create some folders manually.
The firewalld instructions were giving me no end of problems, but I think I finally solved with
sudo systemctl mask iptables
, and also disable ufw. (Maybe oracle’s image is the source of all my problems?)Also, the start/restart.sh scripts (and even the initial install script) sometimes ran into issues with missing files/directories more often than I’d expect, but I’m not sure I wasn’t running from the wrong place, or just did a poor job with manual cleanups of previous attempts. The latest re-install seems to have gone error free, but I’m paranoid so i’ve been using sudo systemctl start mcbe (my server ‘name’) instead of the script as required.
Oh, and worth it or not, I did edit
/usr/lib/systemd/system/initrd-switch-root.service
to include “/usr/bin/ in the lineExecStart=/usr/bin/systemctl --no-block switch-root /sysroot
earlier today which seemed to make a difference in auto-start working…Finally, (maybe meaningless but..?) every time it starts it says
[2022-03-18 07:16:06] NO LOG FILE! - setting up server logging...
permission issue creating new log maybe?Hey Gruntzilla,
Thanks for the kind words and your detailed issue breakdown! I think following that other tutorial may have created a lot of these issues. They install firewalld themselves (the Oracle VM doesn’t come with it).
A couple of people have tried this before and one had no success and never responded and the other did have success but they ended up using Box86 (not sure why at all, that should not be necessary unless it’s ARM). Check out these threads:
#1
#2
In that second thread Ishaan said they did have to install firewalld to fix the firewall issues. I’m guessing that is somehow the source of this pain. It’s not immediately obvious as to why though to me. Maybe the Oracle web VM interface is interfacing with the server somehow and adding these rules?
On a normal Ubuntu VM the script is basically just meant to be ran and installed but Oracle seems to have something else going on. It reminds me of my Amazon Lightsail dedicated server. All of the firewall configuration is done through Amazon’s web interface. The VM itself does nothing or actually ends up being a totally separate set of security in that case and I imagine Oracle’s is similar. As I said earlier though it’s possible Oracle is doing something different than Amazon.
I have ran this exact script on both my Amazon and my VMware ESXI regular Ubuntu VMs without any incident (especially on Ubuntu 20.04, it was basically designed on this OS). Everyone struggled with the firewall that has ever posted about it here. In fact most people had the script work just fine (no missing files) but they were unable to connect to it still.
I do have one question for you that I saw in the reddit comments. Did you not create an additional account to run this server? Is it trying to run as ‘root’? The creator just casually said in his reddit comments:
It definitely does matter. Running the server as root is incredibly dangerous and the script is designed to not let you do it. We just had the log4j exploit bonanza for the Java version of Minecraft and although it hasn’t happened on Bedrock yet we certainly know it’s possible. That was literally the only person in the comments that said the reddit setup guide worked for them at all that I could see.
Theoretically what you would do is start a fresh Oracle VM and then add a new user to it with
sudo adduser minecraft
sudo mkdir /home/minecraft
sudo usermod -d /home/minecraft minecraft
Now I would log in as the new user and run SetupMinecraft.sh. This should create the Minecraft server folder structure at /home/minecraft/minecraftbe/yourserver. Next I would log into the Oracle web interface and allow ports 19132 and 19133 (if those are the ports you used for the default ports).
That should basically be it. I wonder if it’s the user related stuff or maybe not having a home folder doing it. We should definitely not be seeing permissions issues or anything like that if you have a proper account set and a home directory set. It’s also possible these firewall rules for Oracle are trickier than they appear but the screenshot looks about right to me (similar to the Amazon one for my Lightsail dedicated server) except they only did port 19132.
You will need to do both the TCP and UDP rule like they are doing in that screenshot (it’s hard to see, but there are 2 rules, one for UDP and one for TCP). It’s interesting they left the “stateless” box unchecked as UDP is a stateless protocol. Amazon doesn’t have a stateless checkbox on theirs. This is actually wrong as well. The IPV6 port (19133) also needs to have 2 rules added for it for both TCP and UDP. This could actually be the problem as mobile devices / iPads / cell phones LOVE IPV6 and actually prefer it. It’s possible this is the only fix it needs.
Your clients on your Windows network *also* need to have the firewall opened for public. UDP is basically a connectionless protocol so UDP traffic is *always* public on the firewall. We’ve seen cases of this before where the issue was actually the client not allowing public UDP traffic (maybe they clicked “Private” when the Windows dialog box popped up when running Minecraft for the first time, that’s all it takes to break it. I know you said these are mostly iPads but I figured it would be worth mentioning.
I can definitely try it if you’d like. There’s nothing unusual about an Oracle VM. I just think those reddit instructions are setting you up for failure here. Definitely let me know if you’re still having issues as I’ve never seen this not actually work on any dedicated server or VM! It may just have some sneaky configuration options that are different than something like Amazon (although Amazon is the one that every competing service in the world is modeling themselves after).
Maybe it does need some sort of tweak to the script as well but I would be surprised by this as it looks like the VMs are running Ubuntu so every single thing apt is looking for and every directory should already be exactly what it expects and it’s usually other OS’s that I’ve never ran it on before that can’t find the packages and things like that.
I’m willing / happy to try it though to help figure out what is going wrong if those suggestions don’t help!
First up, can I please bother you to strip the IPs out of my previous message, I couldn’t find an edit button, (and I didn’t even notice they were there when I pasted the ping results for the port), the last thing I need is more attention on a private server for 6 year olds 🙂
Great news though! Somewhere along the line I had already tried this and it failed (likely while I had 2 firewalls?), but after re-reading a bunch of your other threads, it turns out that changing AWAY from port 19132 made all the difference. It’s up and running just fine, though I haven’t tested anyone else’s connections yet, (I want to at least import some flashy planet minecraft build or something to catch their eye and draw them away from the ipad-shared games. Can’t have them “Meh” at it out of the gate!
But, yes, I did create the second account, (and weirdly, I had read that exact ‘user’ comment, wondering why he wouldn’t just update the post if he knew that! (because it triggered me to really make a point of doing the 2nd user since oracle just uses “ubuntu” with no obvious way to even change it) I remember going out of my way to create those folders exactly as you suggested (which thinking back, I probably stole from one of your earlier troubleshooting threads as well.)
So, I’m still fairly confident timing/frustration/manual deletes (and the 2 user profiles), and fix over fix over fix created the issues that led to those missing ile/folder errors in your script that (But it was so nice to just delete some folders/.service files and one-line your script to reinstall!!!!!!)
I am going to try your (Java) script on a pure setup with an ARM/oracle server (4gb RAM free, and the ‘guide’ actually comes from the oracle forums), and attempt to do a PaperMC/Geyser/multi-world-portal setup to hopefully get some grief prevention and some mini games / mods to keep their attention span, but it will still need a survival world anyway. (Now that I say that, I guess it won’t really confirm anything since I’d be using your java/Raspberry Pi guide/script, but I’ll let you know when I get there!)
Coincidentally, an oracle sales-guy cold-called me the other day to ask about my server and I just said “I’m not who you’re hoping for with no plans to grow, I just read a guide for a minecraft server for my kid that doesn’t cost me hydro $, and won’t have people calling me during meetings to reboot it. He was like “Oh I understand, you’d be surprised how many people tell me exactly that”, so it seems like it’s working just fine for others, and now I can say – mine certainly did.
I’d guess this has always been about using port 19132, but likely also has something to do with the iptables/firewalld/ufw stuff as well if others are failing too. Just in case you run into more of ‘us’ in the future. If I do need to nuke this thing and start over, I’ll limit it to that and let you know, but for now I’m not touching it while it works beyond importing a new world
I really appreciate the super-quick response, and all the details, I went through all your suggestions just to see if I broke/missed anything along the way, and they were all pretty much in place already.) Your script is fantastic, your guide was fantastic, my inability to combine 2 sets of instructions without complicating everything (and probably 4am exhaustion and a lack of foundational bash/linux understanding) is less fantastic 🙂
Thanks again!
Hey Gruntzilla,
I didn’t catch that either and I usually remove them whenever I see it (I’m guessing we were both ready to jump right into the technicals and weren’t looking for that). I’ve taken them off!
I’m so relieved that changing the port actually worked for you! I actually suggested that to someone else in one of those threads as I had seen this be the cause in other unexplainable situations but I never got a response (maybe that means it did actually fix it!).
Thanks so much for posting your detailed resolution. It definitely helps as I’m sure this will come up again and I’ll definitely direct them to your comments for a successful resolution and really detailed breakdown.
For sure I understand about the profile issues. I often find it easier when I do this (definitely has happened) to delete the VM and start over which is usually only a few clicks with these types of services. It’s very easy to get tripped on but I think it was worth getting that all fixed up. Essentially with this setup if you had a breach / got hacked or exploited somehow the minecraft user wouldn’t be able to access anything outside that folder. You definitely have everything set up securely now and it will autoupdate to keep you protected.
Definitely let me know what your results are using an ARM server. I have said for a long time this should not only work but at least work better than it does on the Pi but nobody has posted a very detailed breakdown of how it performed even though there is absolutely no reason it shouldn’t work. The QEMU emulation is slow but the Box86 emulation has been a winner if it’s having noticeable lag. I’m certain that would speed things up as we do have a bunch of successful Box86 resolutions for people who weren’t getting high enough performance on the Pi.
Thanks again for posting all your detailed steps and everything you’ve said about the script! I tried to keep it extensible and simple for sure and to let it handle the most painful parts (unzipping those .zip files downloaded from the Minecraft site is not fun for every patch). Definitely let me know how it turns out if you do end up trying the ARM-based platform!