У меня тоже была проблема с запуском, но просто отключив SELinux, проблема решилась сама собой:
# First check if this is even your problem, is SELinux enabled?
getenforce
# If the above created the output of '1', then this could very
# well be your problem.. keep reading.
# Disable SELinux
setenforce 0
# Restart bluetooth
systemctl restart bluetooth
Вы можете остановиться на этом шаге, если хотите (подключить свое устройство и работать с ним ). Но если вы хотите исправить это на будущее, правильным решением будет внутреннее обновление вашей библиотеки SELinux (, чтобы вы могли повторно -включить ее):
# Create your own module
grep bluetooth /var/log/audit/audit.log | audit2allow -M mybluetooth
# Install it now:
semodule -i mybluetooth.pp
# Now safely re-enable SELinux:
setenforce 1
В моем случае именно такая запись была причиной:
type=AVC msg=audit(1522596590.758:103): avc: denied { mounton } for pid=999 comm="(uetoothd)" path="/var/lib/bluetooth" dev="dm-0" ino=2362849 scontext=system_u:system_r:init_t:s0 tcontext=system_u:object_r:bluetooth_var_lib_t:s0 tclass=dir permissive=0
Внешний цикл, который у вас есть, в основном
for i in {1..10}; do
some_compound_command &
done
Это приведет к запуску десяти одновременных экземпляров some_compound_command
в фоновом режиме. Они будут запущены как можно быстрее, но не совсем "все одновременно" (т.е. если some_compound_command
займет очень мало времени, то первый вполне может закончиться раньше, чем начнется последний ).
Тот факт, что some_compound_command
оказывается циклом, не важен. Это означает, что код, который вы показываете, является правильным в том, что итерации внутреннегоj
-цикла будут выполняться последовательно, но все экземпляры внутреннего цикла (по одному на итерацию внешнегоi
-Цикл )будет запущен одновременно.
Единственное, что нужно иметь в виду, это то, что каждое фоновое задание будет выполняться в подоболочке. Это означает, что изменения, внесенные в среду (, например. изменения значений переменных оболочки, изменения текущего рабочего каталога с помощью cd
и т. д. )в одном экземпляре внутреннего цикла не будут видны за пределами этого конкретного фонового задания.
Возможно, вы захотите добавить оператор wait
после цикла, просто чтобы дождаться фактического завершения всех фоновых заданий, по крайней мере, до завершения скрипта:
for i in {1..10}; do
for j in {1..10}; do
run_command "$i" "$j"
done &
done
wait
Если у вас есть GNU Parallel, вы должны:
parallel -j0 'for j in {1..10}; do run_command {} $j; done' ::: {1..10}
Одним из преимуществ является то, что выходные данные при параллельной работе run_commands
не будут смешиваться.