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


12

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

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

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

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


Вы пользователь на этом компьютере или у вас есть доступ к сценариям инициализации?
Кори С.


@ Денис: Да, мне это нравится. Но мы не можем предполагать, что у игрового сервера, на котором он работает, нет какой-то консоли, к которой ему нужно было бы получить доступ (то есть всегда работающей на переднем плане). Иначе зачем ему мешать с экраном? Если, конечно, он не знает о 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


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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.