Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Conky [Vyřešeno]  (Přečteno 10527 krát)

juwa2

  • Závislák
  • ****
  • Příspěvků: 4722
Re:Conky [Vyřešeno]
« Odpověď #275 kdy: 28 Srpna 2022, 06:42:34 »
Ten json vypadá taky normálně:
Kód: [Vybrat]
juwa@p-5738:~$ sudo smartctl -i --json=g /dev/sdc
[sudo] heslo pro juwa:         
json = {};
json.json_format_version = [];
json.json_format_version[0] = 1;
json.json_format_version[1] = 0;
json.smartctl = {};
json.smartctl.version = [];
json.smartctl.version[0] = 7;
json.smartctl.version[1] = 3;
json.smartctl.svn_revision = "5338";
json.smartctl.platform_info = "x86_64-linux-5.4.209-0504209-lowlatency";
json.smartctl.build_info = "(local build)";
json.smartctl.argv = [];
json.smartctl.argv[0] = "smartctl";
json.smartctl.argv[1] = "-i";
json.smartctl.argv[2] = "--json=g";
json.smartctl.argv[3] = "/dev/sdc";
json.smartctl.drive_database_version = {};
json.smartctl.drive_database_version.string = "7.3/5319";
json.smartctl.exit_status = 0;
json.local_time = {};
json.local_time.time_t = 1661661133;
json.local_time.asctime = "Sun Aug 28 06:32:13 2022 CEST";
json.device = {};
json.device.name = "/dev/sdc";
json.device.info_name = "/dev/sdc [SAT]";
json.device.type = "sat";
json.device.protocol = "ATA";
json.model_family = "Western Digital Caviar Green (AF)";
json.model_name = "WDC WD20EARS-00MVWB0";
json.serial_number = "WD-WCAZA1959638";
json.wwn = {};
json.wwn.naa = 5;
json.wwn.oui = 5358;
json.wwn.id = 11539816450;
json.firmware_version = "51.0AB51";
json.user_capacity = {};
json.user_capacity.blocks = 3907029168;
json.user_capacity.bytes = 2000398934016;
json.logical_block_size = 512;
json.physical_block_size = 512;
json.trim = {};
json.trim.supported = false;
json.in_smartctl_database = true;
json.ata_version = {};
json.ata_version.string = "ATA8-ACS (minor revision not indicated)";
json.ata_version.major_value = 510;
json.ata_version.minor_value = 0;
json.sata_version = {};
json.sata_version.string = "SATA 2.6";
json.sata_version.value = 30;
json.interface_speed = {};
json.interface_speed.max = {};
json.interface_speed.max.sata_value = 6;
json.interface_speed.max.string = "3.0 Gb/s";
json.interface_speed.max.units_per_second = 30;
json.interface_speed.max.bits_per_unit = 100000000;
json.smart_support = {};
json.smart_support.available = true;
json.smart_support.enabled = true;

A disk se do databáze (na rozdíl od ostatních) nepřidá:
Kód: [Vybrat]
juwa@p-5738:~$ cat /etc/conkys/conkys_data.conf
# Privat database of disks connected to this PC
# Lines begin with char # (hash) are ignored
# Delimiter is char | (pipe)
# Form line must be:
# -----------------------------------------------------------------------
# Ignoring HD | TYPE HD | serial number | HD timeout | Loop delay | treshold | arguments
# -----------------------------------------------------------------------
# Where
# *Ignorig HD-> if value 1 HD is ignored
# *TYPE HD -> TYPE from smartctl
# *serial number -> from smartctl
# *HD timeout -> After how many seconds HD has to switch to standby mode
# *Loop delay -> how often has to script run (in sec)
# *threshold -> how many reads are needed by smartctl to read temperature
# *arguments -> we make HD better thanks to smartctl arguments

|sat|80HM91VFS|600|10|0|
|usbjmicron|WD-WCC4M5KTEANX|600|10|0|
|sat|WD-WXH1A71N8997|600|10|37|
|usbsunplus|100920PBN203DSD0PP7M|600|10|1|
|usbjmicron|WD-WXC1A70U6538|600|10|10|

Pozoroval jsem složku /dev/shm/conkys - po připojení toho disku se v ní na okamžik složka sdc  objeví a hned zase zmizí....
Ještě mám konfigurák (z doby před víceuživatelskou verzí)  ~/.conky/my_conf.conf  ve kterém jsou načteny i oba interní disky (a bylo třeba je ignorovat). Což nyní není.
Takže mě napadlo, zda náhodou není ten problémový disk pokládán z nějaké příčiny za interní...
Kód: [Vybrat]
juwa@p-5738:~$ cat ~/.conky/my_conf.conf
# Privátní databáze disků připojovaných k systému.
# Řádek začínající znakem hash je považován za komentář a bude ignorován.
# Jako delimiter je použit znak roury |
# Každý řádek musí být ve tvaru:
# -----------------------------------------------------------------------
# Ignorace disku | TYPE disku | sériové číslo | doba uspání | rychlost kontroly | treshold | argumenty
# -----------------------------------------------------------------------

#0|sat|TOSHIBAMQ01ABD0|600|10|12|-o off -s apm,128

|sat|80HM91VFS|600|10|0|
1|sat|Y82WP4Z2T|3600|10|17| -s apm,255
1|sat|WDE0QKX8|3600|10|0| -s standby,253
|usbjmicron|WD-WCC4M5KTEANX|600|10|0|
|usbsunplus|100920PBN203DSD0PP7M|600|20|0|

« Poslední změna: 28 Srpna 2022, 08:00:58 od juwa2 »

ramael

  • Člen
  • **
  • Příspěvků: 277
Re:Conky [Vyřešeno]
« Odpověď #276 kdy: 28 Srpna 2022, 09:34:46 »
Jediné co mě teď napadá je řádek č. 29 v /usr/local/sbin/conkys_start.sh
Místo
Kód: [Vybrat]
awk /"$co"/'{sub(";","",$3); gsub("\"","",$3); print $3; konec=1}; END {exit !konec}'
zkus dát (odstranit dvojité závorky kolem proměnné $co):
Kód: [Vybrat]
awk /$co/'{sub(";","",$3); gsub("\"","",$3); print $3; konec=1}; END {exit !konec}'
Skript totiž může úspěšně "načíst sériové číslo". Ale výsledek musí projít like parsováním. V tomto případě oříznutí znaků " a ;
Pokud se tam něco zvrtne, končí to exitem 1 a ten vyvolá hlášku o nemožnosti čtení S.M.A.R.T.u a automaticky se vše ukončí. Nastoupí Viktor čistič a vymaže příslušný dočasný sdresář v /dev/shm/conkys/jsem_bad_disk který se vytvořil ihned po připojení disku. To aby se předcházelo kolizím či nepředvídatelnému chování. Proto hned příslušná složka zmizela.
Možná by pomohlo připojit nějaký pravý json parser. Ale už je to další utilita navíc.
Budu čekat na výsledek. Tak i tak jsem to chtěl trochu přepsat. Jen se budu muset mentálně přepnout do bash uvažování a to mne trvá.

EDIT:
Možná by nebylo špatné se na to kouknout přímo z pohledu zmiňovaného kódu přez který to neprojde:
Kód: [Vybrat]
sudo -i
co="json.serial_number"
awk /"$co"/'{sub(";","",$3); gsub("\"","",$3); print $3; konec=1}; END {exit !konec}' <<< $(smartctl -i --json=g /dev/sdc) || echo "$co je velmi bad request :)"
Jaký to má výsledek? Výsledek by neměl obsahovat uvozovky ani středník.
Nedaří se mi v tom vyvolat chybu, tak to nemohu nijak porovnat. Jediné kdy to chybové hlášení vyplivlo, byla nedostatečná oprávnění se smartctl (zkusil jsem to spustit jako běžný uživatel). Ale v tomto případě by Ti nefungovali teploty ostatních disků...

EDIT II:
Jednodušeji a s menší režií jde ten řádek napsat takto:
Kód: [Vybrat]
awk -F '"' /"$co"/'{ print $2; konec=1 }; END{ exit !konec }'
Takže test by mohl vypadat takto:
Kód: [Vybrat]
sudo -i
co="json.serial_number"
awk -F '"' /"$co"/'{ print $2; konec=1}; END {exit !konec}' <<< $(smartctl -i --json=g /dev/sdc) || echo "$co je velmi bad request :)"
« Poslední změna: 28 Srpna 2022, 20:43:16 od ramael »
Lenovo: Ideapad 5, AMD Ryzen 4000, Ubuntu 20.04.4, pure wayland - Swaywm 
MeWe  Joutůůůůb

 


Provoz zaštiťuje spolek OpenAlt.