Если producer-client
и consumer-server
общаются не через канал, а через сокет, их не следует запускать в конвейере.
Вместо этого
consumer-server &
sleep 2
producer-client &
wait
Это запустит сервер в качестве фонового задания, подождет две секунды, пока сервер все инициализирует, а затем запустит клиент в качестве фонового задания. Затем сценарий ожидает завершения обоих.
Как вы сами предполагаете, клиент также может просто дождаться появления файла сокета, здесь не используяinotify
:
consumer-server &
while [ ! -S /path/to/socket ]; do
echo Waiting for socket to appear... >&2
sleep 1
done
producer-client &
wait
Петля while
(или эквивалентная вещь)также может быть частью того, что producer-client
делает внутри.
Если сервер и клиент не обмениваются данными по каналу, то ваш конвейер
producer-client | consumer-server
по сути то же самое, что и
producer-client &
consumer-server
Мой предложенный набор команд (выше )изменяет это, чтобы вставить короткую задержку между вызовом двух, а также запускает клиент как фоновую задачу (, что не является строго необходимым ).
auditd
был создан именно для этого. inotify/fsnotify
требуют тонны кода, чтобы быть полезными, и они обычно не используются для этой цели.
В сети полно руководств, например.