php + cron

0

cześć,

problem mam nastepujacy :

potrzebuje zeby plik.php dopisywal do pliku .txt dane co 5 sekund (stan ilosci wolnej pamieci RAM) (calosc na Debianie, lokalnie na moim kompie, apache2)

  1. zrobilem plik php ktory co 5 sekund otwiera plik .txt , sprawdza ilosc Free RAM(shell_exec +grep + sed, w wyniku dostaje np. 1221) , dopisuje wartosc i go zamyka, plik ma taki wyglad 1221, 1224, 1218, 1163, ..... itd itd itd...

  2. uruchomilem cron w nastepujacy sposob :

          • php -q ~/.test/monit_ram.php >> ~/.test/mon_ram.txt

i oto co sie dzieje :

w katalogu ~/ dostaje plik mon_ram.txt z wynikiem ktory dopisuje sie co 5 sekund. - tego w ogóle nie chce ....
w katalogu ~/.test/ - dostaje plik mon_ram.txt ktory jest pusty. - tu powinny byc dane a leca do pliku u gory.

co robie zle ? jak to zrobic inaczej ?

z gory dzieki za pomoc

0

Może wklej kod bo to pewnie parę linijek, będzie łatwiej

0

ok wiec tak, wpis w cronie jest w 1 poscie,

plik monit_ram.php ;

<?
include('func.php');

for($i=0;$i<=55;$i=$i+5){
$ile_ram = system_memory_free();
shell_exec("sudo echo '$ile_ram, ' >> ~/.ControlUbuntu/ControlUbuntu/include/mon_ram.txt");

$myFile = "mon_ram.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
$stringData = "$ile_ram, ";
fwrite($fh, $stringData);
fclose($fh);

sleep(5);
}

?>

a tu kod funkcji samej system_memory_free(); :

function system_memory_free(){
	$ram_all=shell_exec('free -m -o | grep "Mem" | sed -e "s/.*:\(.*\).*/\1/g"');
		for($i=0;$i<=25;$i++){
		$ram_all=str_replace("  ", " ", $ram_all);	
		}
	$ram = explode(" ", $ram_all);	
	return intval(trim($ram[3]));
	}

po wywolaniu tworzy sie pusty plik w katalogu wywolania monit_ram.php, natomiast wszystkie dane ktore powinny byc w pliku leca do pliku w katalogu domowym o tej samej nazwie, czyli mon_ram.txt, co robie zle ?

Pozdrawiam
Kamil

1

Robiąc >> cośtam przekierowujesz wyjście swojego skryptu do pewnego pliku. Podczas gdy twój skrypt nie ma wyjścia tylko otwiera sobie samemu plik ~/mon_ram.txt i do niego zapisuje.

Zmień na proste wyświetlanie danych o pamięci przez echo i wtedy operator >> w cronie będzie działał jak trzeba. Albo ustaw pełną bezwzględną ścieżkę w $myFile i pozbądź się przekierowania.

W zasadzie to nie wiem też czy to działa jak trzeba, cron nie jest przeznaczony do uruchamiania co chwilę - może zrób, aby twój skrypt po prostu działał w nieskończoność (możliwe, że trzeba zmienić maximum execution time) i uruchamiaj go w tle przy starcie systemu, niech sobie działa przez cały czas jak działa system, pauzując co 5 sekund?

1 użytkowników online, w tym zalogowanych: 0, gości: 1