service --status - все занимает слишком много времени и hellip; какие альтернативы?

Команда:

service --status-all

Занимает слишком много времени, чтобы перебирать все службы, особенно когда все, что я хочу от вывода, - это имя (мне все равно, работает оно или нет). Есть ли более быстрый способ получить имя службы, которая содержит известный шаблон символа?

С Ubuntu 14.04 и Ubuntu 16.04, используя разные имена служб для php-fpm (php5-fpm в Ubuntu 14.04 и php7.0-fpm в Ubuntu 16.04), разработчики, поддерживающие несколько платформ, должны иметь возможность определять имя службы.

Если я запустил команду ниже на более медленном компьютере:

service --status-all 2>&1 | grep -F -- "-fpm" | awk '{print $4}'

Для возврата «php7.0-fpm» требуется несколько секунд (до 5 секунд) .

Разработчикам, которые должны взаимодействовать с этими службами, требуется более быстрый способ определить имя службы, поскольку они постоянно меняются с одной версии ОС на другую.

Кто-нибудь знает о лучшем и более быстрый способ сделать это?

Тем временем я подал эту ошибку здесь:

https://bugs.launchpad.net/ubuntu/+source/ubuntu-system- service / + ошибка / 1742410

Я не знаю, как еще я могу выполнить то, что мне нужно сделать быстро ...

0
задан 10 January 2018 в 14:05

6 ответов

Если вы уже знаете, что это зависит от версии Ubuntu, почему бы просто не проверить версию?

case $(lsb_release -sc) in trusty) fpm_service=php5-fpm ;; xenial) fpm_service=php7.0-fpm ;; artful) fpm_service=php7.1-fpm ;; esac

В качестве альтернативы вы можете проверить служебные файлы в /etc/init.d (так как все текущие пакеты FPM предоставляют сценарий /etc/init.d):

find /etc/init.d/ -type f -iname '*-fpm' -printf "%P\n"
0
ответ дан 17 July 2018 в 23:27

Похоже, я перейду к следующему подходу:

fpmService=$(ls /etc/init.d 2>&1 | grep -F -- "fpm"); if [ -z "$fpmService" ]; then fpmService=$(ls /lib/systemd/system 2>&1 | grep -F -- "fpm" | grep -o "[^(service)]*" | sed "s/\.$//" fi if [ -z "$fpmService" ]; then fpmService=$(ls /lib/systemd/system 2>&1 | grep -F -- "' . $service . '" | grep -o "[^(service)]*" | sed "s/\.$//") fi

Глупо, но он работает ... команда сервиса все равно должна предоставить нам интерфейс для этого ...

0
ответ дан 17 July 2018 в 23:27

Если вы уже знаете, что это зависит от версии Ubuntu, почему бы просто не проверить версию?

case $(lsb_release -sc) in trusty) fpm_service=php5-fpm ;; xenial) fpm_service=php7.0-fpm ;; artful) fpm_service=php7.1-fpm ;; esac

В качестве альтернативы вы можете проверить служебные файлы в /etc/init.d (так как все текущие пакеты FPM предоставляют сценарий /etc/init.d):

find /etc/init.d/ -type f -iname '*-fpm' -printf "%P\n"
0
ответ дан 24 July 2018 в 13:58
  • 1
    Все дело в том, что я не хочу жестко кодировать его против версии ubuntu, но это несколько помогает. Благодаря! – OwN 10 January 2018 в 14:46

Похоже, я перейду к следующему подходу:

fpmService=$(ls /etc/init.d 2>&1 | grep -F -- "fpm"); if [ -z "$fpmService" ]; then fpmService=$(ls /lib/systemd/system 2>&1 | grep -F -- "fpm" | grep -o "[^(service)]*" | sed "s/\.$//" fi if [ -z "$fpmService" ]; then fpmService=$(ls /lib/systemd/system 2>&1 | grep -F -- "' . $service . '" | grep -o "[^(service)]*" | sed "s/\.$//") fi

Глупо, но он работает ... команда сервиса все равно должна предоставить нам интерфейс для этого ...

0
ответ дан 24 July 2018 в 13:58
  • 1
    Вторая и третья ls | grep трубы излишне сложны - find /lib/systemd/system -name '*-fpm*' -exec basename {} .service \; облегчит вам результат. – muru 10 January 2018 в 14:57
  • 2
    Не знал этого. Благодаря! – OwN 10 January 2018 в 15:00

Если вы уже знаете, что это зависит от версии Ubuntu, почему бы просто не проверить версию?

case $(lsb_release -sc) in trusty) fpm_service=php5-fpm ;; xenial) fpm_service=php7.0-fpm ;; artful) fpm_service=php7.1-fpm ;; esac

В качестве альтернативы вы можете проверить служебные файлы в /etc/init.d (так как все текущие пакеты FPM предоставляют сценарий /etc/init.d):

find /etc/init.d/ -type f -iname '*-fpm' -printf "%P\n"
0
ответ дан 24 July 2018 в 17:02
  • 1
    Все дело в том, что я не хочу жестко кодировать его против версии ubuntu, но это несколько помогает. Благодаря! – OwN 10 January 2018 в 14:46

Похоже, я перейду к следующему подходу:

fpmService=$(ls /etc/init.d 2>&1 | grep -F -- "fpm"); if [ -z "$fpmService" ]; then fpmService=$(ls /lib/systemd/system 2>&1 | grep -F -- "fpm" | grep -o "[^(service)]*" | sed "s/\.$//" fi if [ -z "$fpmService" ]; then fpmService=$(ls /lib/systemd/system 2>&1 | grep -F -- "' . $service . '" | grep -o "[^(service)]*" | sed "s/\.$//") fi

Глупо, но он работает ... команда сервиса все равно должна предоставить нам интерфейс для этого ...

0
ответ дан 24 July 2018 в 17:02
  • 1
    Вторая и третья ls | grep трубы излишне сложны - find /lib/systemd/system -name '*-fpm*' -exec basename {} .service \; облегчит вам результат. – muru 10 January 2018 в 14:57
  • 2
    Не знал этого. Благодаря! – OwN 10 January 2018 в 15:00

Другие вопросы по тегам:

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