Kom ihåg mig?
Home Menu

Menu


php shell_exec och broken pipe

Ämnesverktyg Visningsalternativ
Oläst 2010-07-29, 08:59 #1
azzid azzid är inte uppkopplad
Nykomling
 
Reg.datum: Nov 2009
Inlägg: 4
azzid azzid är inte uppkopplad
Nykomling
 
Reg.datum: Nov 2009
Inlägg: 4
Standard php shell_exec och broken pipe

Jag fick nyss i uppgift att styra upp ett problem med en webbserver. Jag tittade på det men blev inte vidare klok på problemet, varför jag vänder mig hit för att se om någon annan kanske känner igen det.

php-koden ska bara sammanställa och presentera lite siffror, dessa siffror hittas i diverse loggfiler och för att saxa loss rätt bit ur resp. loggfil används små bashscript.

En rad i php-koden ser alltså typiskt ut såhär (|awk finns där för att städa bort decimaler):
Kod:
$var = trim(shell_exec("script.sh current | gawk -F. '{print $1}'"));
och en rad i skalscriptet ser typiskt ut såhär:
Kod:
VAR=$(cat /var/log/file.log | grep $DATE | head -n1 | awk -F, {'print $3'})
Om jag kör skalscriptet från skalet så fungerar det finfint, oavsett om jag kör som root eller om jag kör som webbserverns användare, men så fort jag laddar phpkoden i en webbläsare dyker detta upp i errorloggen för apache:
Kod:
grep: writing output: Broken pipe
Genom att klippa ned koden till ett minimum har jag lyckats slå fast att det är just den första pipen i skalscriptet som genererar felet i loggen, ändrar jag t.ex. så jag pipar till något annat så får jag samma fel, fast gällande det andra kommandot (grep byts till cat t.ex.).

Någon som känner igen problemet? Eller har någon idé om hur man ska få ordning på det?
azzid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-07-29, 09:41 #2
abergmans avatar
abergman abergman är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Feb 2010
Inlägg: 762
abergman abergman är inte uppkopplad
Mycket flitig postare
abergmans avatar
 
Reg.datum: Feb 2010
Inlägg: 762
Citat:
Ursprungligen postat av azzid Visa inlägg
Jag fick nyss i uppgift att styra upp ett problem med en webbserver. Jag tittade på det men blev inte vidare klok på problemet, varför jag vänder mig hit för att se om någon annan kanske känner igen det.

php-koden ska bara sammanställa och presentera lite siffror, dessa siffror hittas i diverse loggfiler och för att saxa loss rätt bit ur resp. loggfil används små bashscript.

En rad i php-koden ser alltså typiskt ut såhär (|awk finns där för att städa bort decimaler):
Kod:
$var = trim(shell_exec("script.sh current | gawk -F. '{print $1}'"));
och en rad i skalscriptet ser typiskt ut såhär:
Kod:
VAR=$(cat /var/log/file.log | grep $DATE | head -n1 | awk -F, {'print $3'})
Om jag kör skalscriptet från skalet så fungerar det finfint, oavsett om jag kör som root eller om jag kör som webbserverns användare, men så fort jag laddar phpkoden i en webbläsare dyker detta upp i errorloggen för apache:
Kod:
grep: writing output: Broken pipe
Genom att klippa ned koden till ett minimum har jag lyckats slå fast att det är just den första pipen i skalscriptet som genererar felet i loggen, ändrar jag t.ex. så jag pipar till något annat så får jag samma fel, fast gällande det andra kommandot (grep byts till cat t.ex.).

Någon som känner igen problemet? Eller har någon idé om hur man ska få ordning på det?
Om du byter ut variablerna mot riktiga värden, vad får du då?
abergman är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-07-29, 16:47 #3
azzid azzid är inte uppkopplad
Nykomling
 
Reg.datum: Nov 2009
Inlägg: 4
azzid azzid är inte uppkopplad
Nykomling
 
Reg.datum: Nov 2009
Inlägg: 4
Det är så rörigt på servern/i loggen just nu att det blir svårt att göra några vettiga tester. Men när jag försökt återskapa problemet med färdiga strängar istället för variabler så misslyckas jag. Kunde tom skapa en textfil och köra exakt samma kod, men då få den att fungera, så jag misstänker att det är nått tjall med loggfilerna som datat hämtas ur.

Svårt som sagt att komma vidare när testerna blir otydliga pga övermatade loggar, så lösningen kan nog få vänta en stund till.

Tack för svaret!
azzid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-07-31, 01:18 #4
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Citat:
Ursprungligen postat av azzid Visa inlägg
Kod:
$var = trim(shell_exec("script.sh current | gawk -F. '{print $1}'"));
Finns variabeln $1 i PHP?

Testa annars:
PHP-kod:
$var trim(shell_exec('script.sh current | gawk -F. \'{print $1}\'')); 
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-08-05, 13:46 #5
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Ursprungligen postat av Jonas Visa inlägg
Finns variabeln $1 i PHP?

Testa annars:
PHP-kod:
$var trim(shell_exec('script.sh current | gawk -F. \'{print $1}\'')); 
Jodå, $1 finns allt i php men inte i samma sammanhang som i shellet. Skarp iaktagelse. ;-)
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-08-07, 01:37 #6
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Citat:
Ursprungligen postat av martine Visa inlägg
Jodå, $1 finns allt i php men inte i samma sammanhang som i shellet. Skarp iaktagelse. ;-)
Alltså, har variabeln $1 något värde.
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-08-15, 06:31 #7
Jines avatar
Jine Jine är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Feb 2005
Inlägg: 1 032
Jine Jine är inte uppkopplad
Har WN som tidsfördriv
Jines avatar
 
Reg.datum: Feb 2005
Inlägg: 1 032
$1 är inte en giltig variabel i PHP vad jag vet, då variabler alltid måste börja med en bokstav?
Jine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-08-15, 13:27 #8
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Citat:
Ursprungligen postat av Jine Visa inlägg
$1 är inte en giltig variabel i PHP vad jag vet, då variabler alltid måste börja med en bokstav?
Precis? Därför försöker PHP interpretera variabeln och genererar ett felmeddelande.

En möjlig orsak till problemet.

Dock återkopplar trådskaparen inte.
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-08-16, 23:56 #9
terbon terbon är inte uppkopplad
Medlem
 
Reg.datum: Jul 2008
Inlägg: 69
terbon terbon är inte uppkopplad
Medlem
 
Reg.datum: Jul 2008
Inlägg: 69
Men eftersom du har " så kommer ju php försöka skriva ut variabeln $1 i linjen, och det är ingen giltig variabel i php.

Pröva att köra med ' istället.
PHP-kod:
$var trim(shell_exec('script.sh current | gawk -F. \'{print $1}\'')); 

--
Jag var bra på att repetera de som de tidigare skrivit, note to self: läs igenom de andra kommentarerna riktigt.

Senast redigerad av terbon den 2010-08-16 klockan 23:59 Anledning: Fixa php-taggar istället, för highlight
terbon är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 09:00.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017