Соответствие точной строке

Как уже было сказано, в systemd намеренно отсутствует поддержка сложной логики. Если необходимо выполнить какую-либо логику запуска (и она не является частью самого демона), вполне нормально написать небольшой сценарий оболочки и указать его в ExecStart = .

Однако есть одна вещь, которую следует учитывать. Сценарий оболочки не должен самостоятельно управлять какими-либо процессами. Сценарий оболочки должен выполнить демон. Это необходимо, чтобы избежать вмешательства в наблюдение и управление собственными процессами systemd.

Пример неправильного сценария оболочки:

#!/bin/sh
if [ ! -r /var/spool/torque/server_priv/serverdb ]; then
        DAEMON_SERVER_OPTS="-t create $DAEMON_SERVER_OPTS"
fi

$DAEMON -- $DAEMON_SERVER_OPTS

Это делает демон дочерним по отношению к интерпретатору оболочки. Если демон не разветвляется и протокол готовности ( Type = ) простой , то это просто дублирующий процесс. В противном случае, если демон выполняет разветвление и вы устанавливаете Type = forking , тогда все будет выполнено тройным, а не двойным ветвлением, и systemd убьет демон.

Пример правильного сценария оболочки:

#!/bin/sh
if [ ! -r /var/spool/torque/server_priv/serverdb ]; then
        DAEMON_SERVER_OPTS="-t create $DAEMON_SERVER_OPTS"
fi

exec $DAEMON -- $DAEMON_SERVER_OPTS

Заменяет процесс оболочки на демон.

2
07.05.2018, 22:53
1 ответ

Вместо grep production, которая соответствует любой строке, содержащей слово «производство», используйте awk '$3 == "production"', которая соответствует только строкам, в которых третьим полем является «производство».

Нет необходимости в каких-либо дополнительных действиях внутри awk:, по умолчанию будет напечатана вся совпадающая строка.

1
27.01.2020, 22:18

Теги

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