Thanks to Jadorel for helping me find this one. So the Minecraft Server Wrapper monitors the Minecraft server on a droplet and also provides an HTTP API for doing stuff like starting, stopping, and running commands on a server. It is written in Python and uses the subprocess module to spawn and track the Minecraft process.
“Exec”ing a command obviously writes the command to Minecraft’s standard input, and stopping a server also involves writing “stop” to the Minecraft process for a graceful shutdown. Today, Jadorel reported to me that sending commands to the server (exec) wasn’t working. I soon found that stopping the server wasn’t working properly either (would time out waiting for graceful shutdown then kill process), and with a little testing it was clear that data wasn’t being sent through to the standard input properly.
I was initially baffled as I hadn’t changed anything recently, but was fortunately able to identify the issue quickly.
stdin buffer wasn’t being flushed.
I’ve never had this issue before; my best guess is it used to automatically flush on newlines, but now it doesn’t.
I’m not sure if it has to do with a Python version bump or something internal in the OS, but anyways I thought this was mildly interesting.
I hadn’t encountered it on my own earlier as I had already op-ed myself on my servers and hadn’t needed the “send command to server” recently.
Anyways, the problem has been fixed, and the Minecraft server wrapper should be updated the next time you start your servers. Thanks again to Jadorel for helping me find this!
PS: several other users have helped a lot throughout the course of development, but I think this is the first time I talked about a bug and fix and credits like this. Be sure to check them out at the project readme! I’ll quickly re-iterate their names here - as of 2015 June 2 - geetfun, SuperMarioBro, bearbin, chiisana, and KayoticSully.
Cheers, and thanks again to everyone!