Я хочу запустить скрипт 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.