[php/crontab] Schrijfrechten vanuit cronjob

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rainmaker1987
  • Registratie: Juni 2005
  • Laatst online: 08-12-2024
Om een automatisch back-up te maken van een bepaald gedeelte van een database heb ik een php script geschreven welke een selectie maakt deze wegschrijft naar een excel bestand (met een oplopend nummer) en vervolgens een mailscript aanspreekt om dit bestand te mailen.

Dit werkt perfect. Het nummer wordt weggeschreven in een .txt bestand waardoor de nummering netjes oploopt en het mailen werkt ook goed. Alleen moet ik nu handmatig dit bestand aanroepen. Ik wil dit echter automatiseren. Ik maak al gebruik van cronjobs om bepaalde statussen in de database te controleren/veranderen en wil dit ook gebruiken om het php script aan te roepen.

De bestanden staan overigens in een met .htaccess beveiligde map.

Ik krijg met de cronjobs continu foutmeldingen dat de bestanden (zowel de .txt als de aan te maken .xls bestand) niet bestaan.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$bestand = "volgordenummer_".$woningstichting."_dekkingsbewijzen.txt";// Bestaat het bestand?

if(!file_exists($bestand)){   
    echo "Het bestand $bestand bestaat niet";}

else{   
    // Kan het bestand geopend worden?   
    if($openbestand = fopen($bestand, "r"))   
        {      
            // Kunnen de gegevens uitgelezen worden?      
            if($x = fread($openbestand,filesize($bestand)))      
            {         

                }      
            else      
            {         
                echo "Kan <em>$bestand</em> niet uitlezen. Is het bestand ge-chmodd?";      
            }      
        
            fclose($openbestand);   
        }   
    
    else   
        {      
            echo "Kan <em>$bestand</em> niet openen. Is het bestand ge-chmodd?";   
        }
    }


Dit is het gedeelte dat de gegevens uitleest. Hij geeft nu aan dat het bestand niet bestaat. Ik heb het ook al geprobeerd met een volledige verwijzing: http://www.mijndomein.com...ng."_dekkingsbewijzen.txt. Maar ook dat werkt niet.
Ook bij het excel bestand geeft hij aan dat het niet te wijzigen is het bestand

De link die echter wordt weergegeven bij regel 4 kan ik kopiëren en plakken in IE en dan wordt het tekstbestandje gewoon geopend.

Mijn vraag is dus eigenlijk: kunnen cronjobs wel php-bestanden aanroepen die bestanden openen/beschrijven?

Zo ja, wat doe ik dan fout. Op het i-net wordt wel geschreven over bash scripts. Dit ziet er heel vaag uit en ik kon ook nergens een voorbeeld zien dat maar een gedeelte werd verzonden. Bij cronjobs wordt vooral uitgelegd hoe de minuten/uren moeten worden ingesteld.

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
ik denk dat op de server cron niet dezelfde rechten heeft als apache. Dit kan je hoogst waarschijnlijk niet zelf oplossen (tenzij het jouw server is natuurlijk)

wat is de command line van je cronjob? roep je php aan? of wget? dit laatste zorgt dat je cron een pagina laat aanroepen op een webserver, dit gaat dan gewoon via apache, en dan zou je exact dezelfde resultaten moeten hebben.

[ Voor 41% gewijzigd door BasieP op 15-09-2006 14:12 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Bij mijn host wordt de cron direct op het domein gedraaid. Dus in je browser www.domein.nl/test/index.php uitvoeren heeft een ander effect dan via een cronjob /test/index.php uitvoeren.

In het eerste geval kan ik direct het bestand in de /test/ directory benaderen, terwijl ik in het tweede geval /test/ moet toevoegen aan de bestandsnaam

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • evolnick
  • Registratie: Januari 2006
  • Laatst online: 04-06-2024
Het kan ook zijn dat de cronjon een andere workdir heeft. Probeer eens het bestand een absolute path te geven.

Als het .txt bestand in dezelfde map staat als het php script dan kan het bijvoorbeeld zo:
code:
1
$bestand = dirname(__FILE__)."/volgordenummer_".$woningstichting."_dekkingsbewijzen.txt";// Bestaat


edit:
komt op het zelfde neer wat KabouterSuper zegt dus :)

[ Voor 9% gewijzigd door evolnick op 15-09-2006 14:20 ]


Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

Rainmaker1987 schreef op vrijdag 15 september 2006 @ 14:07:
Mijn vraag is dus eigenlijk: kunnen cronjobs wel php-bestanden aanroepen die bestanden openen/beschrijven?
Ja
Zo ja, wat doe ik dan fout. Op het i-net wordt wel geschreven over bash scripts. Dit ziet er heel vaag uit en ik kon ook nergens een voorbeeld zien dat maar een gedeelte werd verzonden. Bij cronjobs wordt vooral uitgelegd hoe de minuten/uren moeten worden ingesteld.
Omdat de dir waarin je crontab begint niet dezelfde is als de dir waar je webserver in zit, en mogelijk omdat je omgevingsvariabelen anders zijn. Begin eens met het eerste :-)

Acties:
  • 0 Henk 'm!

  • Rainmaker1987
  • Registratie: Juni 2005
  • Laatst online: 08-12-2024
@BasieP ik riep het geheel aan via php: 27 14 * * * php /home/mijndomein.com/www/beheer/cronjobs/wekelijks.php

ik heb het nu ook geprobeerd met: 27 14 * * * wget /home/mijndomein.com/www/beheer/cronjobs/wekelijks.php

Met dit laatste geeft hij nu aan: unsupported scheme. Met de eerste geeft hij alleen aan dat hij de aan te roepen bestanden binnen het php bestand niet kon openen. met wget ga ik dus achteruit. Wel nog even verder uitzoeken hoe het werkt. Want het lijkt me mogelijkheden geven.


@kaboutersuper + evolnick
Ik heb het zoals aangegeven geprobeerd met absolute paden en gewoon als ../beheer etc. Hier is geen oplossing in te vinden.

@igmar
Zoals aangegeven heb ik het ook geprobeerd met absolute paden. Hier gaf hij dus alsnog een foutmelding mee. Terwijl de links goed zijn. (dit getest door simpel het pad wat ik uit laat draaien met een foutmelding te kopieren + plakken)

Zou dan soms een oplossing zijn om net als bij de crontabs alles aan te roepen met: /home/mijndomein.com/www/beheer/cronjobs/ ??
Mij is nu een beetje onduidelijk of het php script dat ik laat aanroepen dan ook vanuit de directory van de crontabs werkt of vanuit zijn eigen omgeving.

[ Voor 28% gewijzigd door Rainmaker1987 op 15-09-2006 14:39 . Reden: reactie op igmar ]


Acties:
  • 0 Henk 'm!

  • evolnick
  • Registratie: Januari 2006
  • Laatst online: 04-06-2024
Rainmaker1987 schreef op vrijdag 15 september 2006 @ 14:35:
ik heb het nu ook geprobeerd met: 27 14 * * * wget /home/mijndomein.com/www/beheer/cronjobs/wekelijks.php
met wget moet je een url opgeven: http://www.mijndomein.com/beheer/cronjobs/wekelijks.php :-)
Je kunt ook nog een timeout meegeven en waar hij de wget-output en de output van het script moet wegschrijven, dat is handig om te debuggen

En vaag dat een absolute path niet werkt. Kan zijn dat cronjob in een andere virtuele omgeving werkt, maar dat kom je niet vaak tegen dacht ik.

Ik werk trouwens ook met een wget in mijn cronjobs, niet via php commandline (cli).

Acties:
  • 0 Henk 'm!

  • Rainmaker1987
  • Registratie: Juni 2005
  • Laatst online: 08-12-2024
Super dat wget. Dit werkt inderdaad met een volledige verwijzing (ik was eerst nog het www vergeten weg te halen maargoed). Het wget was ik overigens in mijn zoekacties totaal nergens tegengekomen.

Maar het is inderdaad vreemd dat absolute verwijzingen niet werken. Binnen de cronjobs, en ze werken wel want met wget doet het het goed.
Pagina: 1