Projekt (állás) ajánlat

View: New views
7 Messages — Rating Filter:   Alert me  

Projekt (állás) ajánlat

by Vasóczki Ferenc :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Rendben, tehát az előző threadekre, mert nekem viszonylag gyorsan, egy héten belül kéne a következő megoldás:
 
- figyeli, hogy az adott script fut -e, és ha valamiért nem, de még menni kell akkor FOLYTATJA onnan, ahol abbahagyta (adatbázis flag által, én ezt biztosítom)
- cmd.exe használata nélkül.
- akár áramszünet, akár bármi más kivétel miatt folytatja.
- nincs lehetőség a rendszerbe belepiszkálni (mint pl. rendszer indításnál törölni egy könyvtárat)
- windows server 2003 alatti megvalósítás
 
Erre várok akkor ajánlatot, illetve pontosítani szeretnék azzal, aki egyáltalán érdeklődik eziránt.
Az ajánlat a bármilyen formában történő egyeztetés után él.
 
Vasó

--
Weblabor hírlevél: http://weblabor.hu/hirlevel
--
wl-phplista (wl-phplista@...) levelezőlista
https://bors.hoszting.com/mailman/listinfo/wl-phplista
Keresheto archivum: http://weblabor.hu/kereses
--
etikett: http://weblabor.hu/levlistak/illemszabaly
offlista: https://weblabor.hu/levlistak

Re: Projekt (állás) ajánlat

by felho :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

> - figyeli, hogy az adott script fut -e, és ha valamiért nem, de még
> menni kell akkor FOLYTATJA onnan, ahol abbahagyta
Ez a rész tök egyszerű azzal a kóddal, amit küldtem neked:

$lock = uDb_Lock::acquire(uDb_Lock::LOCK_VIEWER_COUNT_LOG_PROCESSOR);
if ( false === $lock )
{
        exit;
}

Ezt beteszed a script elejere, es mondjuk cronbol elindítod percenként.


Üdv,
Felhő
--
Weblabor hírlevél: http://weblabor.hu/hirlevel
--
wl-phplista (wl-phplista@...) levelezőlista
https://bors.hoszting.com/mailman/listinfo/wl-phplista
Keresheto archivum: http://weblabor.hu/kereses
--
etikett: http://weblabor.hu/levlistak/illemszabaly
offlista: https://weblabor.hu/levlistak

Re: Projekt (állás) ajánlat

by Vasóczki Ferenc :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Köszi, utánanézek, nem látom hol írtad volna, ez milyen csomag?
Rákerestem erre, de nem találtam találatot:
LOCK_VIEWER_COUNT_LOG_PROCESSOR

Vasó

> -----Original Message-----
> From: wl-phplista-bounces@...
> [mailto:wl-phplista-bounces@...] On Behalf Of Gergely Hodicska
> Sent: Tuesday, July 22, 2008 7:10 AM
> To: weblabor PHP levlista
> Subject: Re: [wl-phplista] Projekt (állás) ajánlat
>
> > - figyeli, hogy az adott script fut -e, és ha valamiért nem, de még
> > menni kell akkor FOLYTATJA onnan, ahol abbahagyta
> Ez a rész tök egyszerű azzal a kóddal, amit küldtem neked:
>
> $lock = uDb_Lock::acquire(uDb_Lock::LOCK_VIEWER_COUNT_LOG_PROCESSOR);
> if ( false === $lock )
> {
> exit;
> }
>
> Ezt beteszed a script elejere, es mondjuk cronbol elindítod
> percenként.
>
>
> Üdv,
> Felhő

--
Weblabor hírlevél: http://weblabor.hu/hirlevel
--
wl-phplista (wl-phplista@...) levelezőlista
https://bors.hoszting.com/mailman/listinfo/wl-phplista
Keresheto archivum: http://weblabor.hu/kereses
--
etikett: http://weblabor.hu/levlistak/illemszabaly
offlista: https://weblabor.hu/levlistak

Re: Projekt (állás) ajánlat

by felho :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

> Köszi, utánanézek, nem látom hol írtad volna, ez milyen csomag?
> Rákerestem erre, de nem találtam találatot:
Postaládádban keress rá (pár levéllel ezelőtt küldtem a kódot). ;)

> LOCK_VIEWER_COUNT_LOG_PROCESSOR
Ez csak egy nálunk futó folyamat által használt lock. Úgy ítéltem meg,
hogy jobb ha minden lock nevesítve van, ne fordulhasson elő, hogy valaki
elírja a lock nevét, ezért tárolva vannak a lehetséges lockok, valamint
főleg kódkiegészítés miatt mindegyikhez van egy konstans is definiálva,
így végképp kényelmesen lehet használni.


Üdv,
Felhő
--
Weblabor hírlevél: http://weblabor.hu/hirlevel
--
wl-phplista (wl-phplista@...) levelezőlista
https://bors.hoszting.com/mailman/listinfo/wl-phplista
Keresheto archivum: http://weblabor.hu/kereses
--
etikett: http://weblabor.hu/levlistak/illemszabaly
offlista: https://weblabor.hu/levlistak

Re: Projekt (állás) ajánlat

by Vasóczki Ferenc :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

> -----Original Message-----
> From: wl-phplista-bounces@...
> [mailto:wl-phplista-bounces@...] On Behalf Of Gergely Hodicska
> Sent: Tuesday, July 22, 2008 11:46 PM
> To: weblabor PHP levlista
> Subject: Re: [wl-phplista] Projekt (állás) ajánlat
>
> > Köszi, utánanézek, nem látom hol írtad volna, ez milyen csomag?
> > Rákerestem erre, de nem találtam találatot:
> Postaládádban keress rá (pár levéllel ezelőtt küldtem a kódot). ;)
>
> > LOCK_VIEWER_COUNT_LOG_PROCESSOR
> Ez csak egy nálunk futó folyamat által használt lock. Úgy
> ítéltem meg, hogy jobb ha minden lock nevesítve van, ne
> fordulhasson elő, hogy valaki elírja a lock nevét, ezért
> tárolva vannak a lehetséges lockok, valamint főleg
> kódkiegészítés miatt mindegyikhez van egy konstans is
> definiálva, így végképp kényelmesen lehet használni.
>
>
> Üdv,
> Felhő

Akkor nem biztos hogy értelek. Tehát, van egy mssql táblám, és abban
lockolok mondju egy rekordot.
Ha a record lockolva van, akkor még megy ki a levél, ha áramszünet van,
akkor automatikusan oldódik a lock?

Esküszöm nem találom az előző leveled, amiben ezt említetted volna, ezért
kérdeztem, hogy pontosan mit is tanácsoltál?

Vasó

--
Weblabor hírlevél: http://weblabor.hu/hirlevel
--
wl-phplista (wl-phplista@...) levelezőlista
https://bors.hoszting.com/mailman/listinfo/wl-phplista
Keresheto archivum: http://weblabor.hu/kereses
--
etikett: http://weblabor.hu/levlistak/illemszabaly
offlista: https://weblabor.hu/levlistak

Re: Projekt (állás) ajánlat

by felho :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

> Akkor nem biztos hogy értelek. Tehát, van egy mssql táblám, és abban
> lockolok mondju egy rekordot.
Az én konkrét példámban MySQL van, ahol a get_lock-nak lehet tetszőleges
szöveget átadni. Nem tudom, hogy ezt így egy az egyben támogatja-e az
MSSQL, de valami nagyon hasonló biztosan van. Persze a DB-t én arra az
esetre javaslom/használom, ahol az infrastruktúrában amúgy is ott a DB.

> Esküszöm nem találom az előző leveled, amiben ezt említetted volna, ezért
> kérdeztem, hogy pontosan mit is tanácsoltál?
Még a processlist threadben volt:
<?php
/**
   * DB alapu lockolast megvalosito osztaly.
   *
   * Minden egyes hasznalati esetre egy kulon konstanst hozunk letre. Az
erteket celszeru a meg
   * meglevo peldak alapjan letrehozni, hogy biztos elkeruljunk egy
esetleges nevutkozest. Ezek a
   * lockok a teljes DB szintjen jonnek letre, ezert fontos a lock
nevenek egyedisege.
   * @todo: a lock az szerverenként van tárolva, nem pedig
adatbázisonként, ezért a lock nevébe
   * majd bele kell vonni a DB nevét is
   *
   * @author     felho <felho@...>
   *
   * Changelog:
   * 08Jun21 felho   Alap verzio.
   * 08Jun29 felho   Lock_Dao -> uDb_Lock, valamint a teljesen statikus
kialakitas helyett atallas
   *                 egy kevert megoldasra: a statikus acquire a lock
sikeres megszerzese eseten egy
   *                 uDb_Lock peldanyt ad vissza, igy pl. tudunk
destruktort hasznalni.
   */
class uDb_Lock
{
        /** A batch/cron/viewer_count_log_processor.php altal hasznalat lock. */
        const LOCK_VIEWER_COUNT_LOG_PROCESSOR =
'uDb_Lock.LOCK_VIEWER_COUNT_LOG_PROCESSOR';
        /** A batch/cron/channel_statistic_viewer_count_updater.php altal
hasznalat lock. */
        const LOCK_CHANNEL_STATISTIC_VIEWER_COUNT_UPDATER =
'uDb_Lock.LOCK_CHANNEL_STATISTIC_VIEWER_COUNT_UPDATER';

        /*
         * Ez a tomb tartalmazza az elkerheto lockok neveit. A tomb elemek
erteke annak a DB kapcsolatak
         * a neve kell legyen, amelyikben szeretnenk letrehozni a lockot.
         */
        static protected $possibleLocks = array
        (
                self::LOCK_VIEWER_COUNT_LOG_PROCESSOR             => 'logs',
                self::LOCK_CHANNEL_STATISTIC_VIEWER_COUNT_UPDATER => 'logs',
        );

        /**
         * A lock nevet tarolja egy sikeresen letrehozott lock eseten. Igazabol
csak azert lesz
         * szuksegunk ra, hogy a destruktor fel el tudja engedni a lockot, ha
az explicit modon nem
         * tortent volna meg.
         *
         * @var string
         */
        protected $lockName = null;

        /**
         * A db kapcsolatot tarolja, amelyiken letrehoztuk a lockot.
         *
         * @var qDb
         */
        protected $dbConnection = null;

        /**
         * Megprobalja megszerezni az adott nevu lockot.
         *
         * Elofordulhat olyan tipusu lock, amit mindig egy adott entitasra
vonatkoztatva szeretnenk
         * hasznalni (pl. csatorna adatok updatelese). Ilyenkor az $id
parameterben adhatjuk meg az
         * adott entitas azonositojat, es ilyenkor ezt hozzafuzzuk a lock
nevehez. Alap esetben ha az
         * adatbaziskezelo nem tud megszerezni egy lockot, akkor egybol
visszater (ez teljesen jo
         * peldaul, ha azt szeretnenk megakadalyozni, hogy egy cron onmagara
fusson), de a $timeout
         * parameter segitsegevel megadhatunk egy varakozasi idot. Ez jo lehet
akkor, ha tudjuk, hogy
         * nehany, alapvetoen gyors folyamat kozott elofordulhat
versenyhelyzet. Ilyenkor az itt
         * megadott varakozasi idovel sorba rendezhetjuk ezeket.
         *
         * @param string  $lockName   A megszerzendo lock neve.
         * @param integer $id         A "lockolando" entitas azonositoja.
         * @param integer $timeout    Ennyi masodpercet var az adatbaziskezelo
arra, hogy megszerezze a
         *                            lockot.
         *
         * @return uDb_Lock|false   Ha sikerul a lockot megszerezni, akkor egy
uDb_Lock peldanyt a
         *                          visszateresi ertek, ellenkezo esetben false.
         */
        public static function acquire($lockName, $id = null, $timeout = 0)
        {
                if ( empty(self::$possibleLocks[$lockName]) )
                {
                        throw new Exception('Invalid lockname ('.$lockName.') was specified!');
                }

                if ( null !== $id )
                {
                        $lockName .= '.'.$id;
                }

                $sql = "/* ".__FILE__."@".__LINE__." */
                        SELECT GET_LOCK('?', ?)
                ";

                $db = qDb::get(self::$possibleLocks[$lockName]);
                $ret = $db->getOne($sql, array($lockName, $timeout));

                return '1' == $ret ? new uDb_Lock($lockName, $db) : false;
        }

        /**
         * Konstruktor
         *
         * @param string $lockName       A megszerzendo lock neve.
         * @param qDb    $dbConnection   A db kapcsolat, amin letrehoztuk a lockot.
         *
         * @return uDb_Lock
         */
        protected function __construct($lockName, qDb $dbConnection)
        {
                $this->lockName     = $lockName;
                $this->dbConnection = $dbConnection;
        }

        /**
         * Destruktor.
         *
         * Ha meg nem tortent volna meg explicit a lock elengedese, akkor a
destruktor megteszi ezt.
         */
        public function __destruct()
        {
                if ( null !== $this->lockName )
                {
                        $this->release();
                }
        }

        /**
         * Elengedi a lockot (a peldanyon hivjuk !!!). Ha ezt explicit nem
hivjuk meg, akkor a script
         * vegeztevel a destruktor megteszi ezt. Ennek ellenere celszeru lehet
a lockot a lehetosegekhez
         * kepest a leghamarabb elengedni..
         *
         * @return boolean   True ha sikerul elengedni a lockot, ellenkezo
esetben fasle.
         */
        public function release()
        {
                $sql = "/* ".__FILE__."@".__LINE__." */
                        SELECT RELEASE_LOCK('?')
                ";

                $this->dbConnection->getOne($sql, array($this->lockName));

                return '1' == $ret;
        }
}
?>


Üdv,
Felhő
--
Weblabor hírlevél: http://weblabor.hu/hirlevel
--
wl-phplista (wl-phplista@...) levelezőlista
https://bors.hoszting.com/mailman/listinfo/wl-phplista
Keresheto archivum: http://weblabor.hu/kereses
--
etikett: http://weblabor.hu/levlistak/illemszabaly
offlista: https://weblabor.hu/levlistak

Re: Projekt (állás) ajánlat

by Vasóczki Ferenc :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

> -----Original Message-----
> From: wl-phplista-bounces@...
> [mailto:wl-phplista-bounces@...] On Behalf Of Gergely Hodicska
> Sent: Tuesday, July 22, 2008 11:46 PM
> To: weblabor PHP levlista
> Subject: Re: [wl-phplista] Projekt (állás) ajánlat
>
> > Köszi, utánanézek, nem látom hol írtad volna, ez milyen csomag?
> > Rákerestem erre, de nem találtam találatot:
> Postaládádban keress rá (pár levéllel ezelőtt küldtem a kódot). ;)
>
> > LOCK_VIEWER_COUNT_LOG_PROCESSOR
> Ez csak egy nálunk futó folyamat által használt lock. Úgy
> ítéltem meg, hogy jobb ha minden lock nevesítve van, ne
> fordulhasson elő, hogy valaki elírja a lock nevét, ezért
> tárolva vannak a lehetséges lockok, valamint főleg
> kódkiegészítés miatt mindegyikhez van egy konstans is
> definiálva, így végképp kényelmesen lehet használni.
>
>
> Üdv,
> Felhő

Végülis az egyik legegyszerűbb utat választottam.
Létrehozok egy temporary táblát, mondjuk hirlevel5 néven, amibe berakok egy
dátumot.
Ha ez a tábla él, akkor addig az ellenörző script nem engedi a kiküldést,
mert az már folyamatban van.
Ha a gép újraindul, vagy az mssql újraindul, akkor nem lesz ez a tábla,
tehát akkor ha a státusz szeritn még küldeni kéne,
de nincs ez a tábla, akkor mehet újra a kiküldés.

Még azt kell leellenőriznem, hogy ha a script és az mssql között szakad meg
a kapcsolat, vagy a script lehal, akkor vajon megmarad -e a tábla.

Vasó

--
Weblabor hírlevél: http://weblabor.hu/hirlevel
--
wl-phplista (wl-phplista@...) levelezőlista
https://bors.hoszting.com/mailman/listinfo/wl-phplista
Keresheto archivum: http://weblabor.hu/kereses
--
etikett: http://weblabor.hu/levlistak/illemszabaly
offlista: https://weblabor.hu/levlistak