8digit
Goto Top

HDD Temperatur per shell exec abfragen

Guten Tag,

ich habe ich gerade folgendes Script geschrieben:

 
<?php
$tempHDA = shell_exec('hddtemp -n /dev/hda');  
$tempHDB = shell_exec('hddtemp -n /dev/hdb');  
$tempHDC = shell_exec('hddtemp -n /dev/hdc');  

echo $tempHDA.'<br />';  
echo $tempHDB.'<br />';  
echo $tempHDC.'<br />';  

?> 
Ziel davon ist es eigentlich, dass mir die Temperatur der drei Festplatten angezeigt wird, jedoch bekomme ich im Browser gar keine Ausgabe.
Bei dem Server handelt es sich um Debian.

Leider weiß ich nicht woran dies liegt, denn wenn ich "'hddtemp -n /dev/hda" in der Konsole eingebe, bekomme ich ein Ergebnis.

Könnt Ihr mir dabei bitte helfen, Danke.

Mfg. 8digit

Content-ID: 165706

Url: https://administrator.de/forum/hdd-temperatur-per-shell-exec-abfragen-165706.html

Ausgedruckt am: 24.12.2024 um 00:12 Uhr

Dani
Dani 05.05.2011 um 12:43:30 Uhr
Goto Top
Moin,
du weiser aber dass shell_exec im SafeMode von PHP nicht funktioniert. Bitte überprüfe das Mal...


Grüße,
Dani
8digit
8digit 05.05.2011 um 14:41:04 Uhr
Goto Top
Hallo,

also SafeMode ist ausgeschaltet
und was mich wundert, wenn folgendes funktioniert (damit lese ich die CPU-Temperatur aus)

<?php
$temperaturCPU = shell_exec('sensors');  

echo $temperaturCPU.'<br />';  
?>
Dani
Dani 05.05.2011 um 14:53:18 Uhr
Goto Top
Probier es mal so:
$tempHDA = shell_exec('sudo hddtemp -n /dev/hda');  
Ich meine dazu braucht man Root-Rechte...


Grüße,
Dani
8digit
8digit 05.05.2011 um 15:41:21 Uhr
Goto Top
Also, wenn ich das mit sudo mache, lädt die Seite länger und es kommt immer noch keine ausgabe.

Ich vermute aber, dass es trotzdem irgendwas an den Rechten liegt, weil, wenn ich mich als User einlogge, dann kommt

benutzer@debian:~$ hddtemp -n /dev/hda
-bash: hddtemp: command not found

und als root, kommt dann

debian:~# hddtemp -n /dev/hda
34

und weil der Webserver als User "www-user" ausgeführt wird, findet er den Befehl nicht,
was mich jedoch wundert, wieso bekomme ich auf der Homepage nicht die Fehlermeldung angezeigt.?
Dani
Dani 05.05.2011 um 16:12:21 Uhr
Goto Top
Hast du sudo nachinstalliert? Ist nämlich standardmäßig nicht installiert wie z.B. bei Ubuntu.
8digit
8digit 05.05.2011 um 16:39:22 Uhr
Goto Top
Jup, habe ich nachinstalliert.

ich habe mir hddtemp mal etwas genauer angeschaut und herausbekommen, dass ich, wenn ich per Browser auf den Port 7634 zugreife ich folgende Ausgabe bekomme:
|/dev/hda|ST340823A|35|C||/dev/hdb|SAMSUNG SP0822N|37|C||/dev/hdc|WDC WD1600AAJB-00J3A0|32|C|

so, nun habe ich einfach mit fopen versucht diese seite aus zu lesen:
<?php
$filestream = fopen("http://localhost:7634", "r");   //localhost, weil das Script auf dem Server liegt.  
while(!feof($filestream)) {
    $buffer = fgets($filestream, 4096);
    echo $buffer;
}
fclose($filestream);
?>

das einige Prblem dabei ist, wenn ich nun die Seite öffne (also nicht die von hddtemp selbst), dann hängt sich mein Firefox auf und ich sehe kurz irgendwelche Fehlermeldung
Diese hier:
Warning: fopen(http://debian:7634/) [function.fopen]: failed to open stream: HTTP request failed! |/dev/hda|ST340823A|35|C||/dev/hdb|SAMSUNG SP0822N|37|C||/dev/hdc|WDC WD1600AAJB-00J3A0|32|C| in /var/www/temperatur/temperatur.php on line 5
Dani
Dani 05.05.2011 um 16:48:23 Uhr
Goto Top
Hmm... das wird so nicht gehen, da du mit fopen nicht auf den Socket zugreifen kannst sondern nur auf eine Datei. Beispiel: http://localhost:7634/index.html
Versuch es mal mit dem Quellcode: http://forum.ubuntuusers.de/topic/mit-php-hddtemp-etc-auf-homeserver-au ...


Grüße,
Dani
8digit
8digit 05.05.2011 um 17:09:21 Uhr
Goto Top
Ok, also der komplette Quellcode hat mir eigentlich nicht geholfen, eher die Kommentare im Code, weil dieser fast das Selbe ist, wie das von mir, aber nun funktioniert es.

nachdem ich folgendes gemacht habe:
in der Datei "/etc/sudoers "
das "www-data ALL=NOPASSWD: /usr/sbin/hddtemp, /usr/bin/sensors" hinzugefügt.

funktioniert mein Quellcode mit sudo, also
$tempHDA = shell_exec('sudo /usr/sbin/hddtemp /dev/hdb');  
echo $tempHDA;

Danke für die Hilfe face-smile