How do I use crontab to start a screen session?
I want to create a crontab entry so that it starts screen, starts a gameserver and detaches. This is for in case the server is rebooted and I want it to automatically start this for me.
0 0 0 0 0 (command)
should run upon startup.
It runs a shell file located at ~/cube/server.sh
Something like this should work. This example spawns a screen and runs "top":
screen -d -m top
In your crontab, as indicated, you'd want to do something like this:
@reboot /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver
Of course, if the game server requires a "normal" environment set, you can get closer by:
@reboot (. ~/.profile; /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver)
This should be sufficient...run
$ crontab -e
Then enter:
@reboot screen -dmS Victor
Just for completeness' sake, it's also possible to use tmux for the purpose instead of screen
(see this link for a comparison):
@reboot tmux new-session -d -s yourNameOfTheSession "your command to run"
It needs to be noted that simply using screen -dmS SessionNameHere someCommand is NOT enough. In many envs (IE: Ubuntu 18.x) you also have to give the tmp dir or you cant re-attach to the running screen, you wont even be able to list them. The CORRECT way to run screen in crontab is like this:
* * * * * export SCREENDIR=~/tmp ; screen -dmS SessionNameHEre SomeCommand
So if you cant connect to a session started by cron (I had this issue with Ubuntu 18), find out what screen is using for a tmp dir, and put that in the crontab entry. You can do that with "echo $SCREENDIR"