Выполнить одну и ту же команду несколько раз в фоновом режиме

После большой работы у нас есть рабочий конфиг и CHAT-скрипт.

Я думаю, что первопричиной является отсутствие приема, вызванное некачественным проводом мухи.

AT+CSQ

Я верну прием и показатель уверенности (меньшее значение лучше для обоих). В оригинальном журнале это было 99,99. При использовании другой мушки возвращается следующее значение.

+CSQ: 15,99

Окончательный сценарий чата, который был использован:

TIMEOUT 5
ECHO ON
ABORT '\nBUSY\r'
ABORT '\nERROR\r'
ABORT '\nNO ANSWER\r'
ABORT '\nNO CARRIER\r'
ABORT '\nNO DIALTONE\r'
ABORT '\nRINGING\r\n\r\nRINGING\r'
'' 'ATZ'
'' \rAT
TIMEOUT 30
OK 'AT+CSQ'
OK 'AT#SIMDET=1'
OK 'AT+CGDCONT = 1,"IP","telstra.internet"'
OK 'AT+CGDCONT?'
\r \d\c
'OK' 'ATD*99#'
\r \d\c
\r \d\c
'CONNECT' ''

\r \d\c - это пауза в 1 секунду. Так как это происходит при загрузке и включении, немного медленнее - это нормально для данного приложения.

Возможно, это можно оптимизировать.

Скрипт Peers, который мы используем:

# initialization string.
connect "/usr/sbin/chat -v -f /etc/ppp/chat"
# Serial device to which the modem is connected.
/dev/ttyUSB2
# Speed of the serial line.
115200
# Assumes that your IP address is allocated dynamically by the ISP.
noipdefault
# Try to get the name server addresses from the ISP.
usepeerdns
#Use this  connection as the default route.
defaultroute
replacedefaultroute
# Makes pppd "dial again" when the connection is lost.
persist
# Do not ask the remote to authenticate.
noauth
# For testing purposes
debug
nodetach

Он работает сейчас, поэтому должен быть пригоден для использования в будущем.

13
14.04.2016, 14:10
4 ответа

Оператор &, как и ;, является оператором терминатора списка. Они имеют одинаковый синтаксис и могут использоваться взаимозаменяемо (в зависимости от того, что вы хотите сделать). Это означает, что вам не нужны command1 &; command2, все, что вам нужно, это command1 & command2.

Таким образом, в вашем примере вы можете просто написать:

for i in {1..10}; do wait file$i & done

и каждая команда wait будет запущена в фоновом режиме, а цикл немедленно перейдет к следующей.

27
27.01.2020, 19:52

Для совместимости используйте форму posix вместо раскрытия:

for i in $(seq 1 10); do (./wait file$i &); done
4
27.01.2020, 19:52

Ваш двоичный файл действительно называется , подождите ? Я не рекомендую это делать, потому что wait - это встроенная оболочка.

Я считаю, что bash плохо разбирает однострочный цикл, запускающий фоновые процессы. Предлагаю вам изменить код на:

$ for i in {1..10}; do ./wait file$i & echo "Running 'wait' using PID=$!..."; done
2
27.01.2020, 19:52

Вы можете сгруппировать команды и поместить сгруппированные команды в фоновый режим. Например:

$ for i in {1..10}; do ((wait file$i)&); done
2
27.01.2020, 19:52

Теги

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