Domanda

ho usato il seguente comando per installare il mio cronjob:

sudo crontab -e -u www-data

e il cronjob reale:

*/5 * * * * /bin/sh /var/www/cron.sh >/dev/null 2>&1

Ho anche APC in esecuzione sul mio sito. APC CLI è su:

apc.enable_cli = 1

Comunque, sto ottenendo il seguente errore. Ci si sente come il cron potrebbe non essere in esecuzione con abbastanza previlages. Se il cron essere eseguito come root? Fonti mi ha consigliato contro questo.

Cron error while executing rule_apply_all:

exception 'Zend_Cache_Exception' with message 'can't get apc memory size' in /var/www/lib/Zend/Cache.php:209
Stack trace:
#0 /var/www/lib/Zend/Cache/Backend/Apc.php(191): Zend_Cache::throwException('can't get apc m...')
#1 /var/www/lib/Zend/Cache/Backend/TwoLevels.php(518): Zend_Cache_Backend_Apc->getFillingPercentage()
#2 /var/www/lib/Zend/Cache/Backend/TwoLevels.php(192): Zend_Cache_Backend_TwoLevels->_getFastFillingPercentage('saving')
#3 /var/www/lib/Zend/Cache/Core.php(390): Zend_Cache_Backend_TwoLevels->save('1391196921', 'MAGE_AW_FUE_LOC...', Array, 1800)
#4 /var/www/lib/Varien/Cache/Core.php(76): Zend_Cache_Core->save('1391196921', 'AW_FUE_LOCK', Array, 1800, 8)
#5 /var/www/app/code/core/Mage/Core/Model/Cache.php(380): Varien_Cache_Core->save('1391196921', 'AW_FUE_LOCK', Array, 1800)
#6 /var/www/app/code/core/Mage/Core/Model/App.php(1147): Mage_Core_Model_Cache->save(1391196921, 'aw_fue_lock', Array, 1800)
#7 /var/www/app/code/local/AW/Followupemail/Model/Cron.php(98): Mage_Core_Model_App->saveCache(1391196921, 'aw_fue_lock', Array, 1800)

Dopo un po 'di rintracciamento, ho finito al seguente:

    public function getFillingPercentage()
{
    $mem = apc_sma_info(true);
    $memSize    = $mem['num_seg'] * $mem['seg_size'];
    $memAvailable= $mem['avail_mem'];
    $memUsed = $memSize - $memAvailable;
    if ($memSize == 0) {
        Zend_Cache::throwException('can\'t get apc memory size');
    }
    if ($memUsed > $memSize) {
        return 100;
    }
    return ((int) (100. * ($memUsed / $memSize)));
}

Quindi deve significare $memSize == 0 tuttavia quando la I ha installato uno script di test PHP e valutare $memSize, mi dà il giusto valore. Quindi, perché durante un cronjob questo sarebbe diverso?

Ho commentato in local.xml il seguente nodo cache e il cronjob sta funzionando benissimo. Sarebbe l'ideale per capire cosa realmente fa il seguente nodo. Ritengo che Zend guarda a questo config:

    <cache>
        <backend>apc</backend>
        <prefix>MAGE_</prefix>
    </cache>
È stato utile?

Soluzione

Se è stata attivata <backend>apc</backend> e il vostro sito ha funzionato bene, ma non era cron.sh, potrebbe significare che si hanno diverse installazioni PHP sul vostro server.

Prima di tutto corsa in consolle which php. Questo vi darà la php effettivo che viene utilizzato per l'esecuzione dello script php cron.

/usr/bin/php Per esempio nel mio caso ho.

Ora correre /usr/bin/php -m | grep "apc" per controllare se libreria APC è abilitato. Prossimo controllo /usr/bin/php -i | grep apc per ottenere APC config.

I valori consigliati per Magento sono

apc.enabled=1
apc.shm_size=512M
apc.num_files_hint=10000
apc.user_entries_hint=10000
apc.max_file_size=5M
apc.stat=0
apc.optimization=0
apc.shm_segments=1
apc.enable_cli=1
apc.cache_by_default=1
apc.include_once_override=1

Spero che questo vi aiuterà.

Altri suggerimenti

Francesco, ho fatto qualche ricerca sul tuo problema e due soluzioni sono imbattuto in: apc.enable_cli = 1 e apc prefix_for_store_ in local.xml. Potrebbe essere necessario riavviare Apache / Nginx dopo aver modificato qualsiasi configurazione di APC. Controllare le ricette in questi articoli (se non lo hai già fatto): http: //www.magentocommerce .com / schede / viewthread / 180339 / , http://www.magentodeveloperleedsuk.co.uk/zend_cache_exception-cant-get-apc-memory-size/ , http://phpbugs.wordpress.com/2012/11/03/magento-exception-zend_cache_exception-with -message-cant-get-APC-memory-size / , http: // www.magecorner.com/magento-apc-cache/ , http://www.qicai.us/solved-uncaught-exception-zend_cache_exception-w esima-messaggio-cant-get-APC-memory-size , http://www.creation-site-lyon.com/2010/10/28/magento-cron-et-apc/ (questo è in francese, ma si può tradurre con Google).

Per rispondere alla tua domanda, no, non dovrebbe essere necessario eseguire cron.sh come root. Non posso rispondere perché il vostro sito funziona bene con APC abilitato ma cron.sh non lo fa. Mi sento di raccomandare la creazione di uno script di debug /var/www/debug.php e copiare le linee da getFillingPercentage() in esso:

$mem = apc_sma_info(true);
$memSize    = $mem['num_seg'] * $mem['seg_size'];
$memAvailable= $mem['avail_mem'];
$memUsed = $memSize - $memAvailable;

var_dump($mem, $memSize, $memAvailable, $memUsed);

Esegui questo comando utilizzando quasi la stessa linea originale cron.sh , ma con 3 importanti modifiche:

MAILTO="admin@example.com"  # <-- Obvi this should be a real email address. #
*/5 * * * * /bin/sh /var/www/cron.sh /var/www/debug.php 2>&1
  1. Lo script di debug è il primo argomento di cron.sh. Questo verrà eseguito al posto di cron.php
  2. Aggiungere una riga MAILTO per ricevere l'uscita cron (utile per il debug)
  3. Non tubo di uscita a / dev / null, in modo che i messaggi di posta elettronica cron vengono inviati (che non vengono inviati se non v'è alcuna uscita)

Il apc.enable_cli = 1 non era stato letto dal mio /etc/php5/fpm/php.ini o /etc/php5/fpm/php.ini. Invece in /etc/php5/cli/conf.d/20-apcu.ini ho inserito le ultime 2 righe:

extension=apcu.so
apc.enabled = 1
apc.enable_cli = 1

Questo ha risolto il problema. Questo php -i | grep 'apc' comando mi ha aiutato a capire apc.enable_cli era davvero fuori contrariamente a quello che ho pensato.

In primo luogo, se si dispone di APC definito come un tipo di cache backend o di sessione in local.xml. non lo fanno. APC sarà in grado di fare ciò di cui ha bisogno, senza dettagli da Magento. Il tipo di cache è noto per essere problematico ( almeno dal mio uso ). APC nella cache OpCode generato da / runtime server esistenti php web e la cache a prescindere dalla definizione local.xml di Magento o meno.

In secondo luogo, php -f /full/path/to/magento/cron.php prova e bypassare il cron.sh bash, se si vede eccezioni essere gettati dopo l'esecuzione. Io di solito copiare la voce crontab testualmente nella shell per assicurarsi che il suo sparando.

Tuttavia, ho il sospetto semplicemente rimuovendo

<cache>
    <backend>apc</backend>
    <prefix>MAGE_</prefix>
</cache>

da local.xml e / o usando qualcosa come Redds o Memcache invece sarebbe meglio.

Utilizzare apc.php per convalidare la cache APC continuerà a funzionare senza la voce, se ti piace pure.

Ho avuto lo stesso problema. Il mio fornitore mi ha detto, la cron.sh avrebbe cercato di cambiare i diritti di APC non è permesso. Così ho rimosso i comandi e l'APC è bene pure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top