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

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

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

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

Но это тоже не работает (опции не распознаются). Есть предложения?

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

решение1

Theпритонстрока, которую вы видели, может работать в некоторых вариантах unix, но не в Linux. Строки shebang в Linux ограничены: у вас может быть только один параметр. Вся строка -d -m -S screenName /bin/bashпередается как один параметр в screen, а не передается как разные слова.

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

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff

решение2

Согласно страницам руководства на экране:

  • screen -d -m Стартовый экран в отсоединенном режиме. Это создает новый сеанс, но не прикрепляется к нему. Это полезно для сценариев запуска системы.
  • -S sessionname Задайте имя нового сеанса как 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

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

решение3

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

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

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

Связанный контент