обслуживание --status-all занимает слишком много времени & 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}'

Требуется несколько секунд (до 5 секунд), чтобы вернуть «php7.0-fpm».

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

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

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

https://bugs.launchpad.net/ ubuntu / + source / ubuntu-system-service / + bug / 1742410

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

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

2 ответа

Если вы уже знаете, что это зависит от версии 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
ответ дан 10 January 2018 в 13:05

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

    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

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

0
ответ дан 10 January 2018 в 13:05
  • 1
    А-ч @jimirings хорошо, хороший для знания... Я не знал это. – MrMuretto 11 July 2013 в 03:21
  • 2
    А-ч @jimirings хорошо, хороший для знания... Я не знал это. – MrMuretto 11 July 2013 в 03:21

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

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