2x

Hello,

Nem vagyok valami nagy tudasu programozo, inkabb csak "home" szint, de egy szamomra erdekes problemaval talalkoztam, most mar tobb gepen is...

Irtam egy PHP scriptet, ami teljesen egyszeruen shell_exec-el vagy sima exec-el lekeri a szabad lemezteruletet stb..

Szandekosan irtam stb -t, mert mar a veget is kitoroltem a programomnak, csak rogzitem a visszakapott erteket egy fajlba es az alabbi jelenseget tapasztalom:

Ha kezzel futtatom le a scriptet (bash# php progi.php) akkor a program visszaadja a valodi erteket.
Ha crontab-al idozitem a futtatast, akkor a legeslegelso futaskor a valos erteket adja vissza a program, aztan minden tovabbi lefutaskor (es innentol akarhanyszor) a valos ertek ketszerese jon vissza... tehat nem novekmenyesen mindig az elozo ketszerese, hanem a valodi eppen lekert ertek ketszerese.

Koszi a javaslatokat elore is...

Hozzászólások

Nem tűnik egyértelműnek a leírás. Egy numerikus érték kétszeres szorzatát kapod, vagy pedig egy stringet kétszer egymás után?

A PHP script forrása (vagy annak releváns része) jól jönne, valamit a kapott kimenet is, továbbá a cronnal időzített futtatás módja is.

Milyen módon van megoldva az időzítés a cronnal? (crontab -e vagy az /etc/cron.* alatt lévő file-okkal)

Változtatás nélkül kipróbáltam, és nem jelentkezik az általad leírt dolog.

"Tehat a szabad hely mondjuk 10232543 ...
Ekkor folyamatosan ezt irja bele a kimenetbe: 20465086"

Akkor tisztázzuk a rendszert. Linuxon a df (5.97) kimeneti formátuma:


Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hda1              2885728    187000   2552140   7% /

Tehát az awk az általad hívott módon a file-rendszert, a blokkok számát, a foglalt területet és mountpointot hagyja meg, a szabad helyet (és a kihasználtságot) nem.

Tehát a PHP futása után az eredeti df hányadik oszlopában szereplő szám kétszeresét írja? Emellett a másik szám marad az eredeti, vagy az is duplázódik?

FreeBSD-ken probaltam, 6.2-on es 7.0-an.

Ime egy elo pelda a progi kimeneterol, melyet utana fel akarok dolgozni majd:

Ha kezzel futtatom:

/dev/da0s1a:5077038:2370968:/
/dev/da0s1d:28430604:12016100:/home
/dev/da1s1c:34424816:28927818:/home1
/dev/ad2s1c:77513790:47057718:/home2

Amit en kapok cron-al:

/dev/da0s1a:10154076:4741928:/
/dev/da0s1d:56861208:24032112:/home
/dev/da1s1c:68849632:57855424:/home1
/dev/ad2s1c:155027580:94115436:/home2

A megoldás kulcsa a cron által futtatott parancsokhoz adott környezeti válozókban rejlik.

man df:
Values are displayed in 512-byte per block counts.
BLOCKSIZE  If the environment variable BLOCKSIZE is set, the block counts will be displayed in units of that size block.

/etc/profile:

  umask 022 BLOCKSIZE=K

Ezért közvetlenül bashből futtatva:
  # echo $BLOCKSIZE
  K

A cron viszont ezt nem adja tovább a futtatott programok felé, ezért a kétszeres eltérés (1024/512). A megoldás vagy a scriptből felezés, vagy a -k használata, vagy a BLOCKSIZE beállítása lehet.

Ahogy mutattad is, a FreeBSD df-jének is a negyedik oszlopa a szabad hely. A te scripted nem azt írja ki.