Как я могу отправить команды вещи на начальный экран? - PullRequest
5 голосов
/ 14 декабря 2010

Любой сеанс, который я начинаю с "-d -m", не принимает команды "-X stuff [...]", если я не подключился к экрану хотя бы один раз.Сообщение об ошибке отсутствует, команды просто не проходят.

Проблема в том, что я запускаю сеанс из задания cron и не могу подключиться к экрану из cron.

Шаги для повторения

$ screen -m -d -S mydaemon bash
$ screen -S mydaemon -X stuff "`printf "exit\\r"`"
$ screen -ls
        32456.mydaemon  (Detached)
$ screen -r -S mydaemon
$ ^a d
$ screen -S mydaemon -X stuff "`printf "exit\\r"`"
$ screen -ls
No Sockets found in /var/run/screen/S-user

^ ad указывает на нажатие Ctrl + a, а затем на d.

Версии

CentOS release 5.5 (Final)
Screen version 4.00.03 (FAU) 23-Oct-06

Ответы [ 5 ]

8 голосов
/ 17 апреля 2011

Edit: лучший ответ на этот вопрос - этот другой SO ответ .В любом случае, я оставляю свое решение kludgey здесь, если оно вдохновляет решение аналогичной проблемы.


Возможный обходной путь - использовать второй, уже запущенный и отключенный сеанс экрана, чтобы начать сеанс экрана, чтобыкоторый вы хотите отправить команду «вещи» в подключенном режиме, а затем отправить этот сеанс экрана команду отсоединения, а затем команду вещи.

$ screen -dmS spawner
$ screen -S spawner -X screen screen -dR mydaemon
$ sleep 1 # may be necessary
$ screen -S mydaemon -X detach
$ screen -S mydaemon -X stuff "whatever"

(Примечание: удвоенный «экран» равен не опечатка!) Вы по-прежнему остаетесь с неотрывным сеансом экрана (spawner), но если ресурсы, которые он требует, важны, вы всегда можете просто использовать «kill -TERM ...» или его аналог, чтобы завершить его (или иметьчерез определенный промежуток времени он автоматически завершается, начиная с чего-то вроде

$ screen -dmS spawner bash -c "sleep 60"

или аналогичного).

0 голосов
/ 17 октября 2013

screen -d -m / bin / bash "test.sh"

экран (отсоединен) (мобильный) (оболочка) "Что выполнить"

$ screen -d -m /bin/bash "test.sh"
$ screen -li
There is a screen on:
        8540..Satelite  (10/17/2013 04:53:22 AM)        (Detached)
1 Socket in /var/run/screen/S-matt.
0 голосов
/ 31 марта 2013

Спасибо за Рона Камински.

Я нашел другой способ убить экран 'spawner'

    $ screen -dmS spawner
    $ screen -S spawner -X screen screen -dR mydaemon
    $ sleep 1 # may be necessary
    $ screen -S mydaemon -X detach

и добавить строку ниже

    $ screen -S mydaemon -X screen screen -S spawner -dR
    $ sleep 1 # may be necessary
    $ screen -S spawner -X detach
    $ screen -S spawner -X kill
0 голосов
/ 14 декабря 2010

Используя файл .screenrc, вы можете настроить запуск;

screen -t <title> <window position> <command>

Итак, если вы хотите запустить top в окне 7, вам нужно будет сделать

screen -t window7top 7 top
0 голосов
/ 14 декабря 2010

Рассматривали ли вы вместо этого tmux?Это гораздо больше подходит для неинтерактивных задач.

...