Как мне использовать crontab, чтобы начать сеанс экрана?

12

Я хочу создать запись в crontab, чтобы она запускала экран, запускала игровой сервер и отключалась. Это в случае, если сервер перезагружен, и я хочу, чтобы он автоматически запускал это для меня.

0 0 0 0 0 (команда)

должен запускаться при запуске.

Он запускает файл оболочки, расположенный в ~ / cube / server.sh

Виктор
источник
Вы пользователь на этом компьютере или у вас есть доступ к сценариям инициализации?
Кори С.
2
Пожалуйста, смотрите Управление процессами .
Приостановлено до дальнейшего уведомления.
@ Денис: Да, мне это нравится. Но мы не можем предполагать, что у игрового сервера, на котором он работает, нет какой-то консоли, к которой ему нужно было бы получить доступ (то есть всегда работающей на переднем плане). Иначе зачем ему мешать с экраном? Если, конечно, он не знает о nohup и фоновом режиме.
Кори С.
Я пользователь на этой машине.
Виктор,

Ответы:

15

Нечто подобное должно работать. Этот пример порождает экран и запускает "top":

screen -d -m top

В вашем crontab, как указано, вы хотите сделать что-то вроде этого:

@reboot /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver

Конечно, если игровому серверу требуется набор «нормальной» среды, вы можете подойти ближе:

@reboot (. ~/.profile; /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver)
Кори С.
источник
1
что делает . ~/.profileчасть?
Виктор,
Он принудительно устанавливает среду для входа в cron. Без этого вы просто получите пару очень специфических записей. (Подробности см. В man crontab)
Кори С.
У меня есть файл .sh, который выполняет игровой сервер, так будет ли это работать? @reboot (. ~/cube; /usr/bin/screen -dmS gameserver-screen ./server.sh)
Виктор,
Это, наверное, лучший способ сделать это. Если это работает, вам, вероятно, не нужно беспокоиться о профиле, но если вам нужен полный $ PATH и т. Д., Вы всегда можете получить исходный код .profile из сценария server.sh.
Кори С.
5

Этого должно быть достаточно ... запустить

$ crontab -e

Затем введите:

@reboot screen -dmS Victor
АТХ
источник
Не могли бы вы попытаться объяснить, как эта команда «Виктор» связана с выполнением сценария - например, сценария, о котором спрашивал ОП?
Патрик
1
-S только для названия сессии
atx
4

Для полноты картины можно также использовать для этой цели tmuxscreen (см. Эту ссылку для сравнения):

@reboot tmux new-session -d -s yourNameOfTheSession "your command to run"
Петр Пудлак
источник
0

У меня была похожая ситуация, но из-за других необоснованных ограничений я не смог использовать crontab. У меня на самом деле был экран вызова inittab. (заменил некоторые имена, чтобы скрыть информацию):

XXX:5:respawn:/bin/su - useraccount -c "screen -D -m -c /home/xxxxxx/file.screenrc"

В 'file.screenrc' я установил несколько параметров:

sessionname obscuresessionname
multiuser on
cd
screen /home/xxxxxxx/programtostart

Таким образом, это началось при загрузке, и если программа умерла или закрылся экран, она снова появится. Возможно, это не считалось обычным, но мне пришлось обойти несколько странных требований. Если бы нам нужно было это снять, нам бы пришлось закомментировать эту строку и завершить сеанс. Затем, когда будете готовы восстановить его, раскомментируйте и инициализируйте q.

mangloide
источник