Запустить скрипт на экране

25

Я хочу запустить скрипт bash на отдельном экране. Сценарий вызывает программу несколько раз, каждый из которых занимает слишком много времени для ожидания. Моей первой мыслью было просто открыть экран и затем вызвать скрипт, но оказалось, что я не могу отсоединиться (мимо ctrl-a d), пока скрипт работает. Поэтому я провел небольшое исследование и нашел эту инструкцию, которая заменила шебанг следующим:

#!/usr/bin/screen -d -m -S screenName /bin/bash

Но это тоже не работает (варианты не распознаются). Какие-либо предложения?

PS Мне кажется, что сейчас это screen -dmS name ./script.shможет сработать для моих целей, но мне все еще интересно, как включить это в сценарий. Спасибо.

bongbang
источник

Ответы:

28

Притон линии вы уже видели , может работать на некоторых UNIX вариантов, но не на Linux. Линия Шебанга в Linux ограничена: у вас может быть только один вариант. Вся строка -d -m -S screenName /bin/bashпередается как одна опция screen, а не как разные слова.

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

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff
Жиль "ТАК - перестань быть злым"
источник
Это работает хорошо, что "$0"здесь?
Фабич
4
@Lordofdark Это имя сценария. Сценарий вызывает, screenкоторый вызывает, /bin/bashкоторый вызывает сценарий снова.
Жиль "ТАК - перестань быть злым"
16

Согласно экранным справочным страницам:

  • screen -d -m Стартовый экран в отдельном режиме. Это создает новый сеанс, но не присоединяется к нему. Это полезно для сценариев запуска системы.
  • -S sessionname Установите имя нового сеанса равным имени сеанса.

Поэтому, когда я выполнил команду, вы предоставили: screen -dmS name ./script.sh

Screen запускает окно с именем name и автоматически запускает этот script.sh. Чтобы вернуться туда, чтобы увидеть статус, вы просто напечатаете:screen -r test

Теперь в Ubuntu 14.04 команды немного отличаются. Пытаться:

screen -d -m -S test

Теперь для запуска скрипта вам нужно перейти в их конфигурационный файл, чтобы сделать это:

sudo vim /etc/screenrc

Оказавшись там, прокрутите вниз до дна, и вы увидите:

# Example of automatically running some programs in windows on screen startup.
#
#   The following will open top in the first window, an ssh session to monkey
#   in the next window, and then open mutt and tail in windows 8 and 9
#   respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log

Это раздел, в котором вам нужно будет добавить имя скрипта для запуска, и это позволит вам делать все, что вам нужно, с экрана.

ryekayo
источник
Каким-то образом эта команда ( screen -dmS ...) не работает для меня, хотя она действительно должна. Я запускаю его, а затем screen -lsи никаких гнезд не найдено. Мысли?
bongbang
Какой дистрибутив вы используете?
ryekayo
NAME = "Ubuntu" VERSION = "14.04.1 LTS, Trusty Tahr", я думаю. Это виртуальная машина.
bongbang
Дай мне немного, потому что я просто ухожу с работы, и я попытаюсь использовать экран на моей машине, которая также Ubuntu 14.04
ryekayo
@bongbang - какая у вас версия экрана?
СЛМ
3

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

screen -d -m -t nameofwindow sh nameoflaunch.sh

Запуск будет второй частью выше, которая содержит текущие команды Java и версию сервера. Я бегу ванилином.

Прогнозируемые
источник