Запуск приложений в shell скрипте

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

netguard
Сообщения: 30

Запуск приложений в shell скрипте

Сообщение netguard »

Нужно : запустить несколько приложений из shell скрипта. В конце скрипта мне нужно убить приложения, т.е. нужно сохранить их pid. Кроме того запуск с & в конце мне не подходит (специфика не моего приложения, а стороннего - нужно иначе работать не будет), т.е. я думую нужно как-то новый сеанс создовать и в нем запускать.
Вот это:

Код: Выделить всё

$server &
serv_id=$!

Мне не подходит, по выше описанной причине.

Кроме того при этом для каждого запущенного приложение нужно указать начальный каталог запуска. Т.е server будет считать что он запущен из каталога где я скрипт запустил, а мне нужно насильно ему сказать что он запущен из другого каталога, иначе он не сможет найти свои каталоги с конфигами. Как это сделать ?
Спасибо сказали:
Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Запуск приложений в shell скрипте

Сообщение tmp13 »

/home/klmn/klmn
klmn собственно приложение
потомесли нужен пид
ps -ef|grep klmn|awk {'print $2'}
например так=)
или я чёт не понял?)
ну если точнее

Код: Выделить всё

#!/bin/bash
/home/klmn/klmn
pid=`ps -ef|grep klmn|awk {'print $2'}`
kill -15 $pid
exit

а и ещё не знаю как на счёт нового сеанса но тут насколько я знаю просто открывается ещё один bash shell=)
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:
AoN
Сообщения: 14

Re: Запуск приложений в shell скрипте

Сообщение AoN »

1) В основном скрипте запускать отдельно для каждого приложения свой скрипт
2) а в них:
cd /нужная/директория
echo $$ > /var/тырыпыры/дляПриложения_N1.pid
exec приложение_N1
3) затем когда убивать надо будет
for i in /var/тырыпыры/*;do kill $(cat $i); done
Спасибо сказали:
netguard
Сообщения: 30

Re: Запуск приложений в shell скрипте

Сообщение netguard »

Спасибо, понял.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Запуск приложений в shell скрипте

Сообщение sash-kan »

Код: Выделить всё

$ (cd /tmp; vi)&  echo $!
[1] 7919
7919
$ ps
  PID TTY          TIME CMD
 7886 pts/1    00:00:01 bash
 7919 pts/1    00:00:00 bash
 7920 pts/1    00:00:00 vi
 7924 pts/1    00:00:00 ps

[1]+  Stopped                 ( cd /tmp; vi )
как видим, 7919, выведенные командой echo, и есть pid sub-shell-а, внутри которого запущен vi.
pid, считанный из $!, естественно, надо сохранить в какой-нибудь переменой. для последующего использования.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
netguard
Сообщения: 30

Re: Запуск приложений в shell скрипте

Сообщение netguard »

Еще один вопрос появился по поводу запуска, но уже удаленного.

Мне нужно запустить приложение на удаленном терминале.
У меня есть ssh доступ, при этом мне еще нужно залогнится на терминале после ssh доступа под рутом, т.к. напрямую под рутом войти нельзя.
Можно ли как-то все это автоматизировать в скрипте, чтобы только ввод паролей был ?
С точки зрения реализации я не знаю как мне посылать команды когда я войду по ssh туннелю
ssh user@ip
ввод пароля
и все далее под контролем оболочка ssh и пока я из нее не выйду дальнейшие команды в скрипте выполнятся не будут. А мне как раз нужно чтобы они выполнялись в ssh.

Возможно ли это ?
Спасибо сказали:
netguard
Сообщения: 30

Re: Запуск приложений в shell скрипте

Сообщение netguard »

Еще такая проблема появилась, с перенаправлением ввода/вывода.

Код: Выделить всё

kill_app()
{
    if test $app_id -ne 0
    then
    kill $app_id 2> /dev/null
    fi
}
....
$application > /dev/null &
app_id=$!
...
kill_app()
...

В скрипте, после выполнения kill_app у меня на выводе появляется:

Код: Выделить всё

./starter: line 53: 24896 Terminated              $app >/dev/null  (wd: ~/Shell/Test/APP)

Не понимаю откуда это выползает ... мне нужно чтобы никаких надписей подобных не было. Я думал что 2> при kill поможет, однако эта строка все равно появляется ...
на строке 53 я выполняю сравнение с помощью test.
Спасибо сказали:
Аватара пользователя
DjSpike
Сообщения: 2265
Статус: в поисках истины
ОС: Lubuntu 12.04

Re: Запуск приложений в shell скрипте

Сообщение DjSpike »

У меня тоже вопрос немного по теме. Как сделать чтобы после запуска программы дальше выполнялся скрипт, т.е. программа как бы запускалась в фоне.
Вот скрипт:

Код: Выделить всё

#!/bin/bash

tcrecv_BIN="/root/tc-recv"
tcrecv_CONF="/root/tc-recv/recv.ini"
        cd $DIR/bin
        case "$1" in
        start)
    echo "Run Tc-recv"
    szap -c/etc/channels.conf -a1 -n5 2>&1>/dev/null
    cd $tcrecv_BIN
    ./tc-recv $tcrecv_CONF 2>&1
    echo "Ss"
    echo "All done"
           ;;
        stop)
    killall -9 tc-recv

    echo "Telinet kill, inet down."
           ;;
        restart)
            $0 stop
            $0 start
           ;;
        *)
            echo "Usage: `basename $0` start | stop | restart"
           ;;
        esac


после выполнения этой строчки:
./tc-recv $tcrecv_CONF 2>&1

Скрипт останавливается пока не нажмешь CTRL+C тем самым прервав работу программы....
AvReg - По для организации Видеонаблюдения на Linux.
ДЭНСИ:КАССА - Рабочее место кассира под Linux.
Терминальные решения под Linux
Консультации по установке 1с+PostgreSQL+Ubuntu.
Спасибо сказали: