pgrep -f завершается с 1

БОЛЕЕ

К сожалению, предоставление нескольких параметров dhcp -для dnsmasq приводит к тому, что последний применяется (не ко всем ).

Итак, вам нужно указать только два IP-адреса (сеть и шлюз):

dhcp-option=121,10.0.4.0/24,10.8.0.1

Кроме того, вам также необходимо указать каждому серверу

запрашивать маршрут.

И, если ваш DHCP-клиент ISC не поддерживает эту опцию(в текущем Debian поддерживает ), вам нужна строка, как показано ниже в /etc/dhclient.confили/etc/dhcp3/dhclient.conf:

option classless-static-routes code 121 = array of { ip-address, ip-address };

, чтобы сообщить dhclientоб опции 121, а затем использовать скрипт в /etc/dhcp3/dhclient-exit-hooks.d/configure_static_routes, чтобы сделать конфигурацию сети автоматической.

Это довольно хорошее описание .

2
11.08.2020, 16:42
2 ответа

В моей системе Arch, с pgrepиз procps-ng, я вижу это вman pgrep:

EXIT STATUS
       0      One  or  more processes matched the criteria. For
              pkill the process must also  have  been  success‐
              fully signalled.
       1      No  processes  matched  or  none of them could be
              signalled.
       2      Syntax error in the command line.
       3      Fatal error: out of memory etc.

Так и есть,:pgrepзавершится с 1, если все работало нормально, но не было процессов, соответствующих строке поиска. Это означает, что вам нужно будет использовать другой инструмент. Возможно, что-то вроде Кусалананды предложил в комментариях и ilkkachu опубликовал в качестве ответа:

running_apps=$(pgrep -f "somePattern" || exit 0)

Но лучше, ИМО, изменить сценарий. И вместо того, чтобы использовать set -e, закройте его вручную на важных шагах. Затем вы можете использовать что-то вроде этого:

running_apps=$(pgrep -fc "somePattern")
if [ "$running_apps" = 0 ]; then
    echo "none found"
else
    echo "$running_apps running apps"
fi
3
18.03.2021, 23:13

С помощью set -eкоманды, расположенные слева от операторов И(&&)или ИЛИ (||), не вызывают выхода из оболочки, поэтому вы можете подавить ошибку, добавив || true.

Таким образом, это должно выводить 0независимо от найденных процессов (и не выходить до вывода):

set -e
RUNNING_APPS=$(pgrep -f "somePattern" || true)
echo $?
3
18.03.2021, 23:13

Теги

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