Учитывая, что последовательность cf push
завершается только после того, как она запустила службу (или умерла при попытке, я полагаю), вы можете связать конвейер, который говорит (на английском языке): «запустите cf push и найдите сообщение об успехе; если увидите его, запустите cf logs».
В синтаксисе оболочки это будет (с вашими примерами команд):
cf push [appname] -f [manifest.yml] | grep -q "service has been created" && \
cf logs [appname] > [appname].log
Здесь используется конвейер оболочки для соединения вывода cf push
с командой grep
. Команда grep (-q для тихо) ищет сообщение об успешном выполнении (замените строку, которую я использовал, на то, что на самом деле производит cf push
). Если grep найдет сообщение, он завершится с успешным кодом возврата; это позволит оператору &&
запустить команду cf logs
. Если grep завершился неудачно, оператор &&
, а не выполнит команду cf logs
. Я использовал обратную косую черту \
после &&
, просто чтобы красиво обернуть код; все команды могут быть в одной строке.
Для получения дополнительной информации см. Что такое операторы управления и перенаправления оболочки?
Итак, после долгих поисков я обнаружил, что проблема связана с драйвером ядра rtlwifi
. Мне кажется, что драйвер rtl8192cu
должен был отвечать за обработку пропущенных маяков, вызывая функцию ieee80211_beacon_loss
, но этого вызова нигде нет. Я удалил поддержку IEEE80211_HW_BEACON_FILTER
в драйвере rtlwifi
, и проблема была исправлена.
Этот патч по сути является теми же изменениями, что и я, и комментарии в этом файле являются частью того, что привело меня к этому ответу.