Solved:
I solved this problem by introducing a delay before executing the script: @reboot sleep 60; /root/start_server.sh
On Ubuntu 14.04, I have a crontab entry set to run on reboot:
@reboot /root/start_server.sh
And here's start_server.sh:
screen -dmS server bash -c "cd server ; ./run.sh"
When the system starts up, run.sh is indeed executed, and the server remains up, but there are no sessions when I type screen -ls. Because of this, I can't access my server process after boot.
What's happening to the session I named "server"? If it's being terminated somehow, how do I prevent that?
I've tried adding exec bash to start_server.sh as per the answer here, but it had no effect.