ΠΡΠΌΠ°Ρ Π½Π°Π΄ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° SMART disk. ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΌΠΎΠ³Ρ ΡΡΠ΄ΠΈΡΡ, Π΅ΡΡΡ ΡΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ:
Π― Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ libatasmart , ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ.
ΠΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π·Π½Π°Π΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ libatasmart Π±Π΅Π· ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ root?
libatasmart
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <atasmart.h>
int main(void) {
uint64_t mkelvin = 0;
const char *device = "/dev/sda";
SkDisk *d = NULL;
if (-1 == (sk_disk_open(device, &d))) {
fprintf(stderr, "Failed to open disk %s: %s\n", device, strerror(errno));
return 1;
}
if (-1 == (sk_disk_smart_read_data(d))) {
fprintf(stderr, "Failed to read SMART data: %s\n", strerror(errno));
goto finish;
}
if (-1 == (sk_disk_smart_get_temperature(d, &mkelvin))) {
fprintf(stderr, "Failed to get temperature: %s\n", strerror(errno));
goto finish;
}
printf("%llu\n", (unsigned long long)mkelvin);
finish:
if (NULL != d) {
sk_disk_free(d);
}
return 0;
}
smartmontools Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ, ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ *BSD ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠΈΠ³ΡΠ°ΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ.
Π’Π΅, ΠΊΡΠΎ, ΠΊΠ°ΠΊ Ρ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ init systemd, Π±ΡΠ΄ΡΡ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π·Π½Π°Π΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ libatasmart Π±Π΅Π· ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ root?
Π·ΡΠ΅Π½ΠΈΠ΅
computer_name ALL=NOPASSWD:/usr/bin/program_name
@fonic OMFG. Π― Π½Π΅ ΠΌΠΎΠ³Ρ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ. :ΠΊΡΠΈΠΊ:
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
@fonic OMFG. Π― Π½Π΅ ΠΌΠΎΠ³Ρ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ. :ΠΊΡΠΈΠΊ: