BASH: сценарий оболочки как сценарий инициализации - PullRequest
0 голосов
/ 09 июля 2011

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

Когда вы выполняете этот сценарий оболочки, он выводит статус приложения и просто сидит там (в значительной степени консоль);поэтому, когда что-то происходит с программой, она обновляет экран.Это похоже на любой обычный не демонизированный / фоновый процесс.Единственный способ выйти из него - Ctrl-C, который затем полностью завершает процесс.Я знаю, что я мог бы обойти это, выполнив path_to_shell_script/script.sh &, что послужило бы фоном для моей сессии (я мог бы использовать nohup, если бы хотел выйти из системы).

Моя проблема в том, что я просто не знаюкак поместить этот скрипт в сценарий инициализации.Я написал большую часть сценария инициализации, но когда я пытаюсь его демонизировать, он не работает.У меня почти все работает, однако, когда я запускаю initscript, он фактически охватывает ту же самую «консоль» в сценарии, и просто сидит там, пока я не нажму ctrl-c.Вот такая строка:

daemon ${basedir}/$prog && success || failure

Проблема в том, что я не могу создать фон только для части daemon ${basedir}/$prog, и я думаю, что именно здесь я сталкиваюсь с проблемой.Кто-нибудь был успешным в создании сценария инициализации для сценария оболочки?Также этот сценарий оболочки не является демонизируемым (вы можете использовать его в качестве фона, но основная программа не поддерживает опцию daemonize, иначе я бы просто позволил приложению выполнять всю работу).

Ответы [ 2 ]

1 голос
/ 09 июля 2011

Вам нужно открыть подоболочку, чтобы выполнить ее. Это также помогает перенаправить вывод в файл или, по крайней мере, /dev/null.

Что-то вроде:

#!/bin/bash
( 
  { daemon ${basedir}/$prog && success || failure ; } &>/dev/null
) &
exit 0

Работает следующим образом (список) и в фоновом режиме. {list} - это групповая команда, она используется здесь для захвата всех выходных данных ваших команд и отправки их в /dev/null.

.
0 голосов
/ 12 февраля 2012

У меня был успех с первоначально отключенными сеансами экрана для запуска таких вещей, как сервер Half Life и мои собственные сценарии bash "tail logfile".

Чтобы начать что-то в фоновом режиме:

screen -dmS arbitarySessionName /path/to/script/launchService.sh

Чтобы посмотреть на процесс:

# screen -r arbitrarySessionName

Надеюсь, вы найдете это полезным, gl!

...