Cron Job S Delete Record

Salve a tutti, mi servirebbe un cronjobs che mi eliminasse i record che hanno come valore la data odierna!..ho proceduto cosi ma non mi funge:

console.php


// Any writable CConsoleApplication properties can be configured here.

return array(

    'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',

    'name'=>'My Console Application',


    // preloading 'log' component

    'preload'=>array('log'),

        'import'=>array(

                'application.components.*',

                'application.models.*',

        ),


    // application components

    'components'=>array(

            

        // uncomment the following to use a MySQL database        

        'db'=>array(

            'connectionString' => 'mysql:host=localhost;dbname=database',

            'emulatePrepare' => true,

            'username' => 'admin',

            'password' => 'admin',

            'charset' => 'utf8',

        ),

        

        'log'=>array(

            'class'=>'CLogRouter',

            'routes'=>array(

                array(

                    'class'=>'CFileLogRoute',

                                        'logFile'=>'cron.log',

                    'levels'=>'error, warning',

                ),

                                array(

                                        'class'=>'CFileLogRoute',

                                        'logFile'=>'cron_trace.log',

                                        'levels'=>'trace',

                                ),

            ),

                        

        ),

    ),

    

);

OfferteCronCommand


<?php

class OfferteCronCommand extends CConsoleCommand

{

    public function getHelp()

    {

        echo "Deleted unconfirmed registration entries";

    }


    public function run($args)

    {


    	Offerte::model()->deleteAllByAttributes(array(

         'data_fin'=>date('Y,m,d'),

    ));

																		





    }




}    

poi da linux(centos…,vps su aruba)

root: cd /etc

root: vi crontab -l


Sme command to be executed


.

.


name command to be executed


HELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/


# For details see man 4 crontabs


# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name command to be executed

07 10 * * *  /usr/bin/php /var/www/vhosts/nomedominio/hhtdocs/CartellaApplicazione/protected/console.php OfferteCronCommand

ma non elimina niente…,mi manca qualcosa??

  1. Prova a mano a lanciare il Command, da riga di comando, abilitando in php gli error_reporting (E_ALL), per tagliare la testa al toro

  2. Il formato data mi sembra strano. Se la data nel db, come spero, è una campo DATE, allora devi usare




date("Y-m-d")



per la data odierna

  1. per vedere se CRON esegue il file, appendi >> /tmp/log.txt alla fine del comando in cron, e aggiungi un echo "Qualcosa" come prima riga del run, così vedi se cron esegue il file oppure no.

  2. Il comando corretto è <tutto il path> protected/yiic offerteCron, quindi sinora il sistema NON lo eseguiva proprio

  3. Visto che hai configurato i log, aggiungi almeno una riga di log ad inizio del run (ma di tipo error, perchè se lo metti di tipo debug e hai YII_DEBUG a 0 non la vedi). Così sei certo che stia partendo !

se la data è DATE, provo a seguire le tue istruzioni; faccio delle prove e torno

… al di la di quello, è il punto 4 che mi preme di più…

Sto ancora sistemando(è la prima volta che mi cimento in cronjob :) )

53 10 * * * /usr/bin/php /var/www/vhosts/nomedominio/httdocs/CartellaApplicazione/protected/yiic OfferteCronCommand ??





53 10 * * * /var/www/vhosts/nomedominio/httdocs/CartellaApplicazione/protected/yiic OfferteCron




prima, prova a mano da riga di comando di raggiungere yiic




/var/www/vhosts/nomedominio/httdocs/CartellaApplicazione/protected/yiic



… così evitiamo un problema di path a priori

07 11 * * * /var/www/vhosts/dominio/httdocs/applicazione/protected/yiic questo lo scrivo nel cron, e poi come faccio a capire se lo fa o meno?..da ssh devo lanciare qualche altro commando?..,scusa la mia ignoranza

07 11 * * * echo"cron" 07 11 * * * /var/www/vhosts/dominio/httdocs/applicazione/protected/yiic >> /tmp/log.txt

se poi lancio cat /tmp.log.txt…, una cosa del genere?

allora se lancio da riga di commando:

cd /var/www/vhosts/dominio/httpdocs/Applicazione/

entra nella directory correttamente

se eseguo yiic

/var/www/vhosts/dominio/httpdocs/CartellaApplicazione/protected/yiic

Permission denied

ho dato 777 a yiic e ora:

The following commands are available:

  • message

  • migrate

  • offertecron

  • shell

  • webapp

perfetto, quindi il testo completo del comando cron è




07 11 * * * /var/www/vhosts/nomedominio/httdocs/CartellaApplicazione/protected/yiic offertecron



dovresti riuscire ad eseguire, copia incollando nella shell




/var/www/vhosts/nomedominio/httdocs/CartellaApplicazione/protected/yiic offertecron



Questo è quello che intendo con "eseguirlo a mano", guarda se ti da errori in output, fai tutto il debug, e quando è ok, il cron è pronto

ok ho eseguito il commando ed i record vengono eliminati correttamente!,Il cron funziona :)

se funziona lanciandolo a mano, si sei pronto per farlo girare tramite cron

se vuoi fare del debug, prova così

Inserisci questo




echo date("Y-m-d H:i:s") . PHP_EOL;



come prima istruzione della function run(), quindi metti in cron ogni 5 minuti l’esecuzione, avendo cura di dirigere l’output su un file di testo in una posizione esistente e scrivibile.

Per esempio




*/5 * * * * /var/www/vhosts/nomedominio/httdocs/CartellaApplicazione/protected/yiic offertecron >> /tmp/log.txt



Aspetta qualche minuto, e controlla che dentro al file /tmp/log.txt ci sia una riga con data e ora per ciascuna esecuzione.

Se funziona tutto … modifichi l’orario in cron, togli la riga, e passi al prossimo task di programmazione.

[E metti qualche (+) a chi ti ha aiutato :) ]

grazie!..ora eseguo!