Puncte:0

Scriptul Cron și bash afișează jurnalele diferite

drapel de

Am un script simplu pentru a căuta un set de căști bluetooth împerecheat ca mai jos și l-am programat în cron să ruleze în fiecare minut. Funcționează și se conectează la căștile Bluetooth asociate atunci când sunt pornite și eșuează dacă dispozitivul Bluetooth este oprit conform așteptărilor. Pentru a depana programatorul cron, am prins jurnalele scriptului într-un jurnal. Și acel jurnal adaugă doar 0 stdout și nu 1 stderr.

Scenariul

#!/bin/bash

TIMESTAMP=`data „+%d-%m-%Y %H:%M:%S”`

#rfkill block bluetooth ---Folosește-l pentru a bloca bluetooth
pornire bluetoothctl
dacă [ $? == 0 ]
atunci
    echo „$TIMESTAMP Bluetooth este pornit. Se conectează la dispozitivul asociat”
    bluetoothctl connect 74:45:CE:97:90:72
    dacă [ $? == 1 ]
    atunci
        echo „$TIMESTAMP Nu s-a putut conecta căștile Sony. Vă rugăm să verificați disponibilitatea căștilor”
        oprire bluetoothctl
        echo „$TIMESTAMP a oprit Bluetooth”
    altfel
        echo „$TIMESTAMP Conectat la căști Sony prin Bluetooth”
    fi
fi

Cron:

#Pentru a conecta Bluetooth automat
* * * * * /home/xxxxx/Documents/Shell/scripts/bluetooth.sh >> /home/xxxxx/Documents/Shell/scripts/logs/bluetooth.log 2>&1

Când rulez manual scriptul, prinde stderr și stdout pe baza conexiunii.

Schimbarea alimentării a reușit
23-01-2022 22:12:59 Bluetooth este pornit. Se conectează la dispozitivul asociat
Încercarea de conectare la 74:45:CE:97:90:72
Conectarea eșuată: org.bluez.Error.Failed
1
23-01-2022 22:12:59 Conectat la setul cu cască Sony prin Bluetooth
HP-Pavilion:~/Documents/Shell/scripts$

Dar jurnalul /home/xxxxx/Documents/Shell/scripts/logs/bluetooth.log are întotdeauna rezultatul de mai jos ca fiind conectat cu succes, indiferent de conexiune.

23-01-2022 22:10:01 Bluetooth este pornit. Se conectează la dispozitivul asociat
Încercarea de conectare la 74:45:CE:97:90:72
0
23-01-2022 22:10:01 Conectat la căștile Sony prin Bluetooth
23-01-2022 22:11:01 Bluetooth este pornit. Se conectează la dispozitivul asociat
Încercarea de conectare la 74:45:CE:97:90:72
0
23-01-2022 22:11:01 Conectat la căști Sony prin Bluetooth
23-01-2022 22:12:01 Bluetooth este pornit. Se conectează la dispozitivul asociat
Încercarea de conectare la 74:45:CE:97:90:72
0
23-01-2022 22:12:01 Conectat la căști Sony prin Bluetooth
23-01-2022 22:13:01 Bluetooth este pornit. Se conectează la dispozitivul asociat
Încercarea de conectare la 74:45:CE:97:90:72
0
23-01-2022 22:13:01 Conectat la căști Sony prin Bluetooth
23-01-2022 22:14:01 Bluetooth este pornit. Se conectează la dispozitivul asociat
Încercarea de conectare la 74:45:CE:97:90:72
0
23-01-2022 22:14:01 Conectat la căști Sony prin Bluetooth

Poate cineva să mă ajute de ce jurnalul lui cron nu are erori atunci când bluetooth-ul nu se conectează?

bac0n avatar
drapel cn
Gândiți-vă că ar trebui să vă mutați scriptul în systemd.
Zanna avatar
drapel kr
Mă îndoiesc că va face o diferență funcțională, dar FYI `dacă` verifică starea de ieșire a unei comenzi. Așa funcționează. Nu trebuie să scrieți niciodată lucruri precum „o comandă; dacă [ $? = 0]; apoi ...` În schimb: `dacă vreo comandă; apoi...`
Moriartyalex avatar
drapel de
@Zanna Am folosit ```daca ! bluetoothctl connect 74:45:CE:97:90:72 #dacă [ $? == 1 ]``` încă funcționează la fel. Execuția manuală a scriptului tipărește instrucțiunea if dacă nu se poate conecta la dispozitiv. Dar execuția cron și jurnalul său arată doar altceva.
Zanna avatar
drapel kr
Ei bine, nu pot face niciodată `cron` să funcționeze, așa că nu pot comenta despre asta!
Puncte:-1
drapel in

În primul rând, nici măcar rularea manuală nu a dat rezultatele așteptate. Dispozitivul nu a reușit să se conecteze și ieșirea finală ar fi trebuit să fie „Eșuat la conectarea la căștile Sony”.

Opțiunea 1: Problema este cu „echo $?”. Eliminați această afirmație și veți fi bine.

Opțiunea 2: eco $? se evaluează întotdeauna la 0 datorită faptului că dacă [$? == 1 ] returnează întotdeauna false și execută instrucțiunea else.

Deci, furișează-te într-o variabilă ca aceasta.

bluetoothctl connect 74:45:CE:97:90:72 x=$? eco $x dacă [ $x == 1 ]

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.