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

Я написал простой скрипт для запуска и остановки скрипта 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 
  • csvkit Разрешение отклонено
  • Как исправить ошибку: «ошибка поиска символа: /usr/local/lib/libQt5DBus.so.5: undefined symbol»?
  • Отсутствует Python.h в Arch
  • Источники Python компилируют другую версию
  • Запуск сценария Python из любого места
  • Можно ли как-то сказать, переносится ли ноутбук в сценарий bash или python?
  • размещение слов, соответствующих ключу в одном ряду
  • Просмотр вывода скрипта по ssh в режиме реального времени
  • Список файлов при завершении табуляции
  • Проверка воспроизведения звукового файла
  • Может ли python извлекать таблицы org-mode из документов org?
  • Interesting Posts

    Установка Arch Linux вместе с Windows 8

    Как распечатать следующие задачи crontab для выполнения?

    Где хранятся записи в каталоге файлов для подкаталогов?

    Makefile компилирует неизменные файлы

    Как Linux различает реальные и неиспользуемые (например: устройства) файлы?

    Почему OOM-killer иногда не может убить ресурсных свиней?

    Почему я не могу сделать ls -a 1> & -?

    Скопируйте загрузчик / загрузочный раздел на другой диск (cdm-crypt)

    не удалось запустить темноту на малине pi

    Почему приложение не запускается с экрана без задержки?

    Синхронизировать почту с помощью offlineimap через службу / таймер systemd; получение пароля из гнома

    Как разрешать только точные обновления пакетов из репозитория?

    Получение комбинированного подсчета всех вхождений строки в несколько каталогов?

    Не удалось переименовать пользователя root из MySQL

    Каково поведение переключателя контекста в середине сигнала тревоги ()?

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