Команда:
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
Я не знаю, как еще я могу выполнить то, что мне нужно сделать быстро ...
Если вы уже знаете, что это зависит от версии 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"
Похоже, я перейду к следующему подходу:
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
Глупо, но он работает ... команда сервиса все равно должна предоставить нам интерфейс для этого ...
Если вы уже знаете, что это зависит от версии 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"
Похоже, я перейду к следующему подходу:
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
Глупо, но он работает ... команда сервиса все равно должна предоставить нам интерфейс для этого ...
Если вы уже знаете, что это зависит от версии 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"
Похоже, я перейду к следующему подходу:
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
Глупо, но он работает ... команда сервиса все равно должна предоставить нам интерфейс для этого ...