Грепление переменной

Я написал простой скрипт для запуска и остановки скрипта Python в качестве службы. Я должен быть откровенным в отношении версии Python, на которой я запущен, потому что это находится в окне CentOS 5 с установленным Python 2.4 и 2.6 (оба через yum).

Вот что я до сих пор:

#!/bin/sh # chkconfig: 123456 90 10 workdir=/usr/local/bin/Foo start() { cd $workdir /usr/bin/python26 $workdir/Bar.py & echo "FooBar started." } stop() { pid=`ps -ef | grep '[p]ython26 /usr/local/bin/Foo/Bar.py' | awk '{ print $2 }'` echo $pid kill $pid sleep 2 echo "FooBar stopped." } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo "Usage: /etc/init.d/foobar {start|stop|restart}" exit 1 esac exit 0 

Две вещи, в которых мне нужна помощь:

1) Я хочу быть «умнее» относительно имени файла и управления именами каталогов и устанавливать некоторые переменные до тех пор, пока что-нибудь повторится позже в скрипте (например, workdir). Моя основная проблема – это команда grep, и я не понял, как обращаться с переменными внутри grep. Мне бы хотелось, чтобы вы предложили более эффективный способ сделать это.

2) Я хочу добавить поддержку статуса для этого сценария инициализации и попросить его проверить, работает ли Bar.py.

One Solution collect form web for “Грепление переменной”

Возможно, мне что-то не хватает, но я не понимаю, почему вы возились с grep в первую очередь. Вот что такое pgrep :

 #!/bin/sh # chkconfig: 123456 90 10 workdir=/usr/local/bin/Foo start() { cd $workdir /usr/bin/python26 $workdir/Bar.py & echo "FooBar started." } stop() { pid=`pgrep -f '/Bar.py$'` echo $pid kill $pid sleep 2 echo "FooBar stopped." } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo "Usage: /etc/init.d/foobar {start|stop|restart}" exit 1 esac exit 0 

Команда pgrep предназначена для возврата PID процессов, чье имя соответствует указанному шаблону. Поскольку это скрипт python, фактический процесс – это что-то вроде:

 python /usr/local/bin/Bar.py 

Где имя процесса – python . Итак, нам нужно использовать флаг -f pgrep для полного имени:

  -f, --full The pattern is normally only matched against the process name. When -f is set, the full command line is used. 

Чтобы убедиться, что это не соответствует таким fooBar.py , как fooBar.py , шаблон является /Bar.py$ так что он соответствует только части после последнего / и в конце строки ( $ ).

Для справок в будущем вы никогда не должны использовать ps | grep ps | grep чтобы получить PID. Это всегда будет возвращать как минимум две строки: одну для текущего процесса и одну для запуска grep:

 $ ps -ef | grep 'Bar.py' terdon 27209 2006 19 17:05 pts/9 00:00:00 python /usr/local/bin/Bar.py terdon 27254 1377 0 17:05 pts/6 00:00:00 grep --color Bar.py 
  • Невозможно использовать python speech_recognition lib Класс микрофона из-за ALSA
  • Как возобновить команду «WATCH» при повторном подключении USB-GPS
  • Есть ли такое понятие, как расширение, где искать поиски?
  • OfflineIMAP говорит мне, что SQLite не установлен, хотя это
  • Я хочу установить библиотеку, которая требует версии python и, имея две установленные, находит неправильную
  • Создание службы systemd для Flask через nginx
  • Как установить переменную прокси-сервера HTTP для заданий cron?
  • Ошибка установки PIL: SyntaxError: Отсутствие скобок в вызове 'print'
  • Не удалось запустить скрипт python - Отказано в разрешении
  • python один вкладыш + сравнить номера
  • Сценарий Bash не может расширять переменную среды, несмотря на несколько разных подходов
  • Interesting Posts

    Linux вырезает команду с -f1

    Найти команду с несколькими условиями

    Дублировать UUID для физических томов, но PV не входят в группу томов

    Несколько совпадений и печати в одной строке

    как pdfjoin пейзаж и портретные изображения JPEG в один файл PDF?

    Активировать блок устройства без разделения?

    Разрешение экрана Lubuntu + VirtualBox

    Как сопоставить шаблон, удалить шаблон, а также следующую и предыдущую строку в Solaris 10

    Каковы преимущества дистрибутивов NAS в среде SOHO

    Получение ошибочной ошибки проверки подлинности в openldap

    Почему подстановка процесса приводит к файлу с именем / dev / fd / 63, который является трубой?

    Руководство по установке Xen на CentOS 5.9 (Это все еще актуально)

    Отключить обработку пакетов TCP ядром Linux на определенном порту

    Кто-нибудь хотел бы помочь мне начать страницу в Википедии «Список раскручиваемых выпусков Linux Distribustions»?

    Как Debian PTS обнаруживает, что есть новая версия upstream?

    Linux и Unix - лучшая ОС в мире.