Red5 на Debian, выходной PID

463
milks

Я нащупываю свой путь с этим, как новичок со всеми вещами Linux, поэтому, пожалуйста, будьте терпеливы :)

Я хотел бы вывести идентификатор процесса программы в файл. Из моих чтений это обычно достигается специальной переменной pling, которую поддерживает linux:

make_something_run.sh & echo $! > /var/run/someting.pid 

однако, когда я пытаюсь применить это в моем скрипте запуска для red5, он успешно создает файл pid, но в нем нет идентификатора. Это конкретный скрипт:

start) echo -n "Starting Red5" echo -n " " cd $RED5_HOME su -s /bin/bash -c "$RED5_HOME/$RED5_PROG.sh &" $RED5_USER echo "$RED5_HOME/$RED5_PROG.sh &" ## su -s /bin/bash -c "$RED5_HOME/$RED5_PROG.sh > start.log &" $RED5_USER echo $! > /var/run/red5.pid wait $! sleep 2 ;; 

Я пробовал с и без wait $!(который, я думаю, ждет запуска процесса, прежде чем писать файл?), Но безуспешно. Мои единственные другие мысли - сделать что-то необычное с помощью grep и ps aux, чтобы извлечь число, хотя я не знаю, будет ли это надежным подходом.

1

1 ответ на вопрос

2
Diblo Dk

Вам нужно добавить эхо
make_something_run.sh & echo $! > /var/run/someting.pid
                                                     ^

http://www.odi.ch/weblog/posting.php?posting=291

РЕДАКТИРОВАТЬ:
su -s /bin/bash -c "$/$.sh & echo \$! > /var/run/red5.pid" $RED5_USER

или
https://stackoverflow.com/questions/6197165/getting-a-pid-from-a -background-процесс, управляемый-а-другому пользователю

спасибо за ответ, я отредактировал пост, чтобы включить пропущенный эхо в моем примере, однако он присутствует ниже в моем посте в скрипте, с которым у меня проблемы, так что не исправление моей проблемы milks 11 лет назад 0
Можете ли вы попробовать с помощью `su -s / bin / bash -c" $ / $ .sh & "$ RED5_USER`. Я видел, как вы тестировали эхо, но использовать {} нормально, когда вам нужно положить переменную вместе с текстом Diblo Dk 11 лет назад 0
Вы, должно быть, извините меня, но я немного подзабылся на sh and bash. Но я также вижу, что может быть проблема, вы используете `bash` в` su`. Попробуйте также с `su -s / bin / bash -c" $ / $ .sh & echo $!> /Var/run/red5.pid "$ RED5_USER` Diblo Dk 11 лет назад 1
Да, это ваша проблема. Http://stackoverflow.com/questions/6197165/getting-a-pid-from-a-background-process-run-as-another-user Я просто вижу, что этот вопрос нужно задавать в stackoverflow.com Diblo Dk 11 лет назад 0
Это выглядит сложно! Спасибо за ваши старания, посмотрю как у меня получится milks 11 лет назад 0
@DibloDk: Ваша последняя команда почти верна, изменение на `su -s / bin / bash -c '$ / $ .sh & echo $! > /var/run/red5.pid '$ RED5_USER`. Обратите внимание на одинарные кавычки, в противном случае `$!` Уже раскрывается до выполнения команды и, следовательно, приводит к неверному PID. mpy 11 лет назад 0
как раз собирался опубликовать подобное, в конце концов я заставил его работать, избежав $! var: `su -s / bin / bash -c" $ / $ .sh> start.log & echo \ $!> /var/run/red5.pid "$ RED5_USER` milks 11 лет назад 2
Ах да, сри :-) Diblo Dk 11 лет назад 0
@milks: Я просто хотел исправить свой комментарий: Вы абсолютно правы. Вы _те к этому через escaping_, иначе `$ ` не будет раскрыт ... (я использовал слишком тривиальную команду для тестирования `;)`) mpy 11 лет назад 0
@DibloDk: Пожалуйста, подумайте над расширением своего ответа, чтобы решение для `su ...` (т.е. исходный вопрос) находилось непосредственно в нем. Затем, более позднему посетителю не нужно будет копаться в комментариях `:)` mpy 11 лет назад 0

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