Рейтинг:0

Скрипт Cron и bash показывает разные журналы

флаг de

У меня есть простой скрипт для поиска сопряженной bluetooth-гарнитуры, как показано ниже, и он запланирован в cron для запуска каждую минуту. Он работает и подключается к сопряженной bluetooth-гарнитуре, когда она включена, и дает сбой, если устройство bluetooth выключено, как ожидалось. Для отладки планировщика cron ловил логи работы скрипта в лог. И этот журнал добавляет только 0 stdout, а не 1 stderr.

Скрипт

#!/бин/баш

TIMESTAMP=`дата "+%d-%m-%Y %H:%M:%S"`

#rfkill block bluetooth --- Используйте это, чтобы заблокировать bluetooth
bluetoothctl питание включено
если [$? == 0 ]
тогда
    echo "$TIMESTAMP Bluetooth запущен. Соединение с сопряженным устройством"
    подключение bluetoothctl 74:45:CE:97:90:72
    если [$? == 1 ]
    тогда
        echo "$TIMESTAMP Не удалось подключить гарнитуру Sony. Пожалуйста, проверьте доступность гарнитуры"
        bluetoothctl питание выключено
        echo "$TIMESTAMP Остановил Bluetooth"
    еще
        echo "$TIMESTAMP подключен к гарнитуре Sony через Bluetooth"
    фи
фи

Крон:

#Для автоматического подключения Bluetooth
* * * * * /home/xxxxx/Documents/Shell/scripts/bluetooth.sh >> /home/xxxxx/Documents/Shell/scripts/logs/bluetooth.log 2>&1

Когда я запускаю скрипт вручную, он перехватывает stderr и stdout в зависимости от соединения.

Изменение питания выполнено
23-01-2022 22:12:59 Bluetooth запущен. Подключение к сопряженному устройству
Попытка подключения к 74:45:CE:97:90:72
Не удалось подключиться: org.bluez.Error.Failed
1
23-01-2022 22:12:59 Подключен к гарнитуре Sony по Bluetooth
HP-Pavilion:~/Documents/Shell/scripts$

Но журнал /home/xxxxx/Documents/Shell/scripts/logs/bluetooth.log всегда имеет вывод ниже как успешное подключение независимо от подключения.

23-01-2022 22:10:01 Bluetooth запущен. Подключение к сопряженному устройству
Попытка подключения к 74:45:CE:97:90:72
0
23-01-2022 22:10:01 Подключен к гарнитуре Sony по Bluetooth
23-01-2022 22:11:01 Bluetooth запущен. Подключение к сопряженному устройству
Попытка подключения к 74:45:CE:97:90:72
0
23-01-2022 22:11:01 Подключен к гарнитуре Sony по Bluetooth
23-01-2022 22:12:01 Bluetooth запущен. Подключение к сопряженному устройству
Попытка подключения к 74:45:CE:97:90:72
0
23-01-2022 22:12:01 Подключен к гарнитуре Sony по Bluetooth
23-01-2022 22:13:01 Bluetooth запущен. Подключение к сопряженному устройству
Попытка подключения к 74:45:CE:97:90:72
0
23-01-2022 22:13:01 Подключен к гарнитуре Sony по Bluetooth
23-01-2022 22:14:01 Bluetooth запущен. Подключение к сопряженному устройству
Попытка подключения к 74:45:CE:97:90:72
0
23-01-2022 22:14:01 Подключен к гарнитуре Sony по Bluetooth

Может ли кто-нибудь помочь мне, почему в журнале cron нет ошибок, когда Bluetooth не подключается?

bac0n avatar
флаг cn
Думаю, вам следует вместо этого перенести свой скрипт в systemd.
Zanna avatar
флаг kr
Сомневаюсь, что это будет иметь какое-то функциональное значение, но к вашему сведению `if` проверяет статус выхода команды. Вот как это работает. Никогда не нужно писать такие вещи, как `какая-то команда; если [$? = 0]; затем ...` Вместо этого: `если какая-то команда; тогда ...`
Moriartyalex avatar
флаг de
@Zanna Я использовал ```if ! подключение bluetoothctl 74:45:CE:97:90:72 #если [$? == 1 ]``` все равно работает так же. Выполнение скрипта вручную печатает оператор if, если не удается подключиться к устройству. Но выполнение cron и его журнал показывают только другое.
Zanna avatar
флаг kr
ну, я никак не могу заставить `cron` работать, так что не могу комментировать это!
Рейтинг:-1
флаг in

Во-первых, даже ваш ручной прогон не дал ожидаемых результатов. Устройству не удалось подключиться, и окончательный вывод должен быть «Не удалось подключиться к гарнитуре Sony».

Опция 1: Проблема связана с "echo $?". Удалите это утверждение, и все будет в порядке.

Вариант 2: эхо $? всегда вычисляется до 0, из-за чего if [$? == 1 ] всегда возвращает false и выполняет оператор else.

Итак, просто введите переменную, подобную этой.

подключение bluetoothctl 74:45:CE:97:90:72 х=$? эхо $х если [ $х == 1 ]

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.