SA-MP Server Not Starting on Linux VPS: Complete Troubleshooting Guide
Technical guide to diagnose and fix SA-MP server that won't start on Linux VPS: segfault, missing libs, permissions, port in use, and silent plugin crashes.
An SA-MP server that won’t start on a Linux VPS is one of the most common
problems for anyone hosting their own gamemode. The official samp03svr
binary was compiled in 2015 for Linux i386, and on modern distributions
(Ubuntu 22.04+, Debian 12, AlmaLinux 9) it runs into library, permission,
and port configuration mismatches that produce confusing error messages
when they produce any at all.
This guide covers systematic troubleshooting: how to capture the real error, identify the root cause among the five most common ones (wrong architecture, missing 32-bit libs, permissions, port in use, plugin crash), and apply the right fix. The target audience is the owner who already has root SSH access and wants to understand what’s happening, not just “make it work somehow”.
Estimated time: 15-30 minutes to run the full diagnostic, plus the time to apply the specific fix (from 2 minutes for a permission issue up to 20 minutes for a plugin rebuild).
Prerequisites
You need a 64-bit Linux VPS with root SSH access, the samp03svr binary
(or omp-server if you’re using open.mp) already extracted to a
directory, and server.cfg configured with at least one valid gamemode.
This guide assumes Ubuntu 22.04/24.04 or Debian 12 — on RHEL-based
distros (AlmaLinux, Rocky), swap apt for dnf and adjust package
names accordingly.
Before you start, validate the basic environment:
Ubuntu 22.04 / Debian 12 x86_64 (with i386 multiarch) UDP 7777 512 MB Capture the real error before anything else
The first trap is assuming “won’t start” means “produces no output”. Almost always the binary is printing the error to stderr and disappearing from the screen too fast — or the error is being discarded by the way you’re running the server.
Enter the server directory and run the binary in the foreground, with no wrapper:
cd /home/samp/server
./samp03svrIf you see “No such file or directory” even with the file present
(ls -la samp03svr confirms it), you’re hitting the classic missing
32-bit libs problem — skip to the next section. If you see a message
about a plugin, gamemode, or port, write it down literally.
If the terminal goes back to the prompt with no message at all, capture stderr explicitly:
./samp03svr 2> error.log
cat error.logAn empty output here means a silent segfault — the binary was killed by
the kernel before it could print anything. Confirm with strace:
sudo apt install -y strace
strace -f -e trace=openat,execve ./samp03svr 2>&1 | tail -30The last line before +++ killed by SIGSEGV +++ shows which file the
loader was trying to open when it died — usually a missing .so.
If you always run the server with nohup ./samp03svr & or inside
screen, stderr may be going to nohup.out or nowhere at all. For
troubleshooting, always test in the foreground first with explicit
redirection.
Cause 1: missing 32-bit libs (the most common)
samp03svr is a 32-bit i386 ELF. On a modern 64-bit VPS, multiarch
support is not enabled by default and the Linux dynamic loader can’t
resolve the dependencies.
Confirm the binary’s architecture:
file samp03svrExpected output: ELF 32-bit LSB executable, Intel 80386. If you see
ELF 64-bit, you’re running an unofficial build — skip to the next
section.
List missing dependencies:
ldd samp03svrIf the output has lines like libstdc++.so.6 => not found or not a dynamic executable, the 32-bit libs are missing.
Enable multiarch and install the i386 libs:
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y libc6:i386 libstdc++6:i386 lib32gcc-s1On Debian 12 the package is lib32gcc-s1. On Ubuntu 22.04, the same
name works. On RHEL-based distros, use dnf install -y glibc.i686 libstdc++.i686.
Confirm the fix worked:
ldd samp03svr
./samp03svrEvery line from ldd should show real paths (no not found), and the
binary should come up at least far enough to print the SA-MP banner.
Cause 2: wrong permissions on the binary or directory
A permission problem manifests as an obvious “Permission denied” — but
also as “No such file or directory” when an intermediate directory
doesn’t have execute permission (the x bit).
Make sure the binary is executable:
chmod +x samp03svr
chmod +x plugins/*.so 2>/dev/nullConfirm that the user who will run the server owns the entire directory.
Assuming user samp:
sudo chown -R samp:samp /home/samp/serverIf you’re running as root (not recommended — see FAQ), skip this step.
The scriptfiles/ and logs/ directories need write permission:
chmod -R u+w scriptfiles logs gamemodesCause 3: UDP port 7777 in use or blocked
SA-MP uses UDP 7777 by default. If another process is listening on that port — or the firewall is blocking it — the server may start and immediately die, or come up but stay unreachable from outside.
Check if the port is free before starting:
sudo ss -ulpn | grep 7777If it returns something, another process is using it. Identify the PID
and decide: kill the process, or change the port in server.cfg (the
port line).
Confirm the firewall allows incoming UDP 7777:
sudo ufw status
sudo ufw allow 7777/udpIf you use iptables directly:
sudo iptables -A INPUT -p udp --dport 7777 -j ACCEPTTo confirm the port is actually reachable from the internet, run from
another machine: nmap -sU -p 7777 YOUR_IP. If you see open or
open|filtered and the server is running, you’re fine. If you see
closed, there’s a firewall in the path (datacenter, cloud security
group, or the host itself).
Cause 4: plugin crash on load
A plugin that’s incompatible with the server version or the VPS glibc is the second most common cause. The typical symptom: the server prints the banner, shows “Loading plugin: X”, and disappears without further explanation.
Edit server.cfg and comment out every plugin (prefix the line with
; or delete it):
nano server.cfgFind the plugins ... line and clear its contents temporarily, leaving
just plugins (empty).
Bring the server up with no plugins. If it runs, the problem is a
plugin. Go back to server.cfg and add plugins back one by one,
restarting between each addition, until you reproduce the crash. The
last plugin you added is the culprit.
For problematic plugins, confirm the architecture:
file plugins/mysql.soIt must be ELF 32-bit (same as samp03svr). A plugin compiled as 64-bit
won’t load on a 32-bit server. Download the correct version from the
plugin’s official repository.
Verification: confirm the server is responding
With the server running, confirm it’s listening:
sudo ss -ulpn | grep 7777Expected: a line with samp03svr or your process PID.
Check the server’s own log:
tail -f server_log.txtLook for lines like Started server on port 7777. That’s the
definitive sign that the server is ready to accept connections.
Troubleshooting common errors
”Bind to UDP port 7777 failed”
Another process is using the port. Change port in server.cfg to
7778, or kill the conflicting process (sudo lsof -i :7777 then
kill -9 PID).
”Failed to allocate memory”
VPS with low RAM and a heavy gamemode. Confirm with free -m. If free
RAM is under 100 MB, upgrade the plan or enable temporary swap (2 GB)
to confirm memory was indeed the cause.
”Plugin failed to load”
Almost always a glibc mismatch. Very new distros (Ubuntu 24.04) ship glibc 2.39, and older plugins were compiled against 2.27. Compile the plugin locally or pick a more conservative LTS distro (Ubuntu 22.04, Debian 11).
Running the SA-MP server as root exposes the entire VPS if the binary
or a plugin gets exploited. Create a dedicated user (adduser samp)
and configure a systemd service with User=samp.
Next steps
With the SA-MP server running, it’s worth hardening the operation:
- Configure a
systemdservice for auto-restart on crash - Enable logrotate on
server_log.txtso it doesn’t fill the disk - Migrate the gamemode to open.mp for more detailed crash logs
- Set up automatic backup of the
scriptfiles/folder - Monitor server health via the SA-MP query API
If you’re hosting SA-MP in production, Hostini game server plans ship with Linux pre-configured, multiarch enabled, and datacenter-level DDoS protection out of the box — which eliminates the three most common causes in this guide right at provisioning time.
Frequently asked questions
Why does samp03svr run fine in the terminal but fail in the background?
When run in foreground, the binary inherits the TTY and shows loader errors. In background (nohup, screen, systemd), stderr can be silently dropped. Always redirect stderr to a file (2> server-error.log) before assuming the server just won't come up.
Do I really need 32-bit libc on a 64-bit VPS?
Yes. The official samp03svr binary is ELF 32-bit i386. On a modern 64-bit Linux VPS, you need the multiarch package (libc6:i386 + libstdc++6:i386). Without it, the error is 'No such file or directory' even with the file present, because the 32-bit loader isn't installed.
Can I run open.mp instead of the original SA-MP?
Yes, and it's usually a better choice for new servers. open.mp is compatible with legacy pawn gamemodes, ships native 64-bit binaries, and has much more detailed crash logging. But the troubleshooting procedure (permissions, port, plugins) is identical to SA-MP.
The server comes up, stays online for 30 seconds, and dies. What's going on?
It's almost always a plugin crash during the OnGameModeInit callback. Comment out every plugin in server.cfg, bring the server up, and add plugins back one at a time until you reproduce the crash. The usual suspect is MySQL R39+ or plugins compiled for a different ABI.
How do I know if UDP port 7777 is being blocked by the firewall?
Run 'sudo ufw status' or 'sudo iptables -L -n | grep 7777'. To test from outside, use 'nmap -sU -p 7777 YOUR_IP' from another machine. If the port shows 'open|filtered' but the server doesn't respond, the issue is the datacenter firewall or the cloud security group.
Is it safe to run the SA-MP server as root?
No. If the binary or any plugin has an exploitable bug, the attacker gets a root shell. Create a dedicated user (adduser samp), give it ownership of the directory, and run the server under that user via systemd with User=samp. High security gain for five minutes of work.