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-Key: 165706

Url: https://administrator.de/contentid/165706

Printed on: April 25, 2024 at 18:04 o'clock

Member: Dani
Dani May 05, 2011 at 10:43:30 (UTC)
Goto Top
Moin,
du weiser aber dass shell_exec im SafeMode von PHP nicht funktioniert. Bitte überprüfe das Mal...


Grüße,
Dani
Member: 8digit
8digit May 05, 2011 at 12:41:04 (UTC)
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 />';  
?>
Member: Dani
Dani May 05, 2011 at 12:53:18 (UTC)
Goto Top
Probier es mal so:
$tempHDA = shell_exec('sudo hddtemp -n /dev/hda');  
Ich meine dazu braucht man Root-Rechte...


Grüße,
Dani
Member: 8digit
8digit May 05, 2011 at 13:41:21 (UTC)
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.?
Member: Dani
Dani May 05, 2011 at 14:12:21 (UTC)
Goto Top
Hast du sudo nachinstalliert? Ist nämlich standardmäßig nicht installiert wie z.B. bei Ubuntu.
Member: 8digit
8digit May 05, 2011 at 14:39:22 (UTC)
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
Member: Dani
Dani May 05, 2011 at 14:48:23 (UTC)
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
Member: 8digit
8digit May 05, 2011 at 15:09:21 (UTC)
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