Запущение скрипта в фоне, не придерживаясь оболочки

Только выделить сторону Debian:

Предыдущий выпуск Debian - Травление (8-го апреля 2007) - шло с PHP 5.2.0.

Текущий выпуск Debian - Lenny (14-го февраля 2009) - шел с PHP 5.2.6.

Если должны быть какие-либо основные обновления пакетов во время цикла выпуска, те версии обычно доступны по backports.org, если у них есть значимая база пользователей. Полный список бэкпортированных пакетов, доступных Lenny, может быть найден здесь. Этот список относительно короток на данный момент, так как последнему выпуску только несколько месяцев.

Для наблюдения определенных версий для PHP и других пакетов в Debian, можно использовать packages.debian.org.

2
задан 5 October 2009 в 16:18
7 ответов

Необходимо попытаться запустить скрипт на "экране".

screen -D -m run1.sh

И затем можно схватить экран с:

screen -r
3
ответ дан 3 December 2019 в 10:27
  • 1
    Существует два типа пользователей: те, которые используют экран и тех, которые должны быть. –  Zimmy-DUB-Zongy-Zong-DUBBY 5 October 2009 в 18:13

Проблема состоит в том, что сценарий на самом деле заканчивается, но если он оставит другую программу подключенной к терминалу (фоновой обработкой это), то затем SSH все еще сохранит соединение присоединенным.

использование nohup просто позволяет оболочке знать, что, если внешний объект отправляет сигналы зависания, они должны быть проигнорированы, но это не делает на самом деле, разъединяет программу от консоли.

Я не знаю так или иначе для явного разъединения программы от терминала, но одна вещь, которую можно сделать, отправляют Сигнал HUP в сессию SSH, которая запустила скрипт с помощью команды

kill -HUP $PPID

это завершит соединение SSH и оставит выполнение программы, но вызов ssh клиент получит ужасное "соединение, закрытое удаленным хостом" сообщение об ошибке.

1
ответ дан 3 December 2019 в 10:27
  • 1
    Это предполагает, что способ сделать это к ssh без tty; can' t помнят опцию за это. –  pjc50 5 October 2009 в 17:55
  • 2
    SSH обычно выполняет удаленные команды без TTY (если Вы не вызываете его с -t). -T отключает это, выполняя интерактивную оболочку. Так tty или никакой tty - под управлением программа, которая присоединена к консоли, предотвращает корректное завершение работы SSH. –  Guss 5 October 2009 в 18:10
ssh myhost "nohup bin/run1.sh"

Должен добиться цели.

0
ответ дан 3 December 2019 в 10:27
  • 1
    Это doesn' t. Это все еще оставляет мое зависание в оболочке, от того, где я могу только выйти через Ctrl+C. –   5 October 2009 в 17:03

Я полагаю, что Вы корректны о nohup. В run1.sh попытайтесь изменить последнюю строку на:

nohup ./bin/run2.sh $JBOSS_HOSTNAME | logpipe $JBOSS_DIST/log/server.log 2>&1 &
0
ответ дан 3 December 2019 в 10:27

В дополнение к ssh-t упомянутый выше, то, которое я думаю, будет работать, несомненно, необходимо будет закрыть все исходные данные сценария и выводы:

ssh myhost "bin/run1.sh > yourlog 2>&1 < /dev/null"

Весь кредит к OpenSSH FAQ, где я нашел это несколько лет назад.

0
ответ дан 3 December 2019 в 10:27

Что происходит если run1.sh источники run2.sh?:

. ./bin/run2.sh $JBOSS_HOSTNAME | logpipe $JBOSS_DIST/log/server.log 2>&1 &
0
ответ дан 3 December 2019 в 10:27

Скорее всего, все еще открыты файловые дескрипторы fd> 2. Уточняйте у lsof.

0
ответ дан 3 December 2019 в 10:27

Теги

Похожие вопросы