PostgreSQL
coub
css
express.js
freeware
git
jquery
laravel
links
linux
macos
mysql
node.js
php
python
task1
ubuntu
vim
virtualbox
анекдот
игры
интересно
музыка
стихи
цитаты
linux
ubuntu
node.js
You have to
login
to post a new comment.
Ubuntu: как получить PID запущенного процесса
March 26, 2013
Маленькие "хитрости" bash. На примере перезапуска приложения node.js
Из переменной (правильно называть это переменными??) $$ - можно получить PID текущего скрипта, то есть если вы планируете в нем зависнуть то имеет смысл положить куда-то PID-файл чтобы потом что-то с этим процессом делать. Баш вообще интересная штука, жаль почти не остается времени на глубокие раскопки в этих шаманствах.
#!/bin/bash # чтобы было легче жить, добавим все нужные пути в переменные DAEMON="/usr/local/bin/node" ROOT_DIR="/home/user/project-copy-folder" # тут на основании базовых путей выставляем пути к файлам PID, # логов и скрипта, запускающего само приложение PIDFILE="$ROOT_DIR/pidfile" SERVER="$ROOT_DIR/app.js" LOG_FILE="$ROOT_DIR/app.js.log" # останавливаемся, обратите внимание на то, как получается и обрабатывается PID echo -n "Stopping $SERVER: " kill -9 $(cat $PIDFILE) && echo 'ok stoped' || echo 'error on stop my-funny app' # чистим логи и убираем старый PID (это опционально) >$LOG_FILE >$PIDFILE # стартуем. тут самое как мне кажется, непонятное — это конструкция echo $! > $PIDFILE # здесь $! это PID последнего запущенного приложения (читаем ман по bash), с пониманием # этого нюанса становится понятно все остальное echo -n "Starting $SERVER: " `$DAEMON $SERVER > $LOG_FILE & echo $! > $PIDFILE &` && echo 'ok, started' || echo 'error on start my-funny app'Интересная особенность как мне показалось состоит в том, что если мы выполним например вот такой код
/usr/local/bin/node /home/user_name/project/app.js & echo $!То увидим напечатанный PID. А вот если исполнить тоже самое, но через eval
NODE='/usr/local/bin/node' APP='/home/user_name/project/app.js' `$NODE $APP &` echo $!То не увидим ничего. То есть eval где-то у себя это значение закусывает и нам оно нормально не доезжает. Соответственно решением (скорее всего одним из решений, так как я никакой не специалист по bash), будет получение PID-а прямо внутри этого самого eval-a как показано в первом примере.
Из переменной (правильно называть это переменными??) $$ - можно получить PID текущего скрипта, то есть если вы планируете в нем зависнуть то имеет смысл положить куда-то PID-файл чтобы потом что-то с этим процессом делать. Баш вообще интересная штука, жаль почти не остается времени на глубокие раскопки в этих шаманствах.
Comments
No comments here yet.