2011-07-08 4 views
0

У меня есть сценарий оболочки, который вызывает java-файл jar и запускает приложение. Нет никакого способа обойти это, поэтому я должен работать с тем, что у меня есть.BASH: Shell Script as Init Script

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

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

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

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

ответ

1

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

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

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

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

0

У меня был успех с первоначально отключенными сеансами экрана для запуска таких вещей, как сервер наполовину жизни и мой собственный скрипт bash для «хвоста».

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

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

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

# screen -r arbitrarySessionName 

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