Autor Zpráva
Stroganov
Profil *
Dobrý večer,

v práci mám CMS, ktoré vyvíja pre nás materská pobočka a ja ho pri vydaní novej verzie aktualizujem takto:

CMS sa načítava na stránky na základe symlinku cms smerujúceho na priečinok cms1. Po vyprodukovaní novej verzie CMS z materskej pobočky si nahrám novú verziu na server do priečinka cms2, prispôsobím potrebám našej pobočky a potom prepnem tak, že symlink cms nasmerujem na cms2 a zároveň priečinok cms1 premenujem na cms1-old.

Problém tohto postupu je, že spôsobuje niekoľkominútové výpadky našich webov, a preto ho musím robiť mimo svojej pracovnej doby. Rád by som to robil nejako inak. Prečo dochádza k tomu, že po prepísaní symlinku si weby nedokážu ihneď nájsť správne súbory a trvá pár minút, kým sa rozbehnú a dá sa to nejako obísť?
ttttt
Profil *
Přepsání symlinku proběhne (skoro) okamžitě. Po otevření souboru dostane aplikace nový obsah. Pokud ale už čte soubor, uvidí pořád stejný, který otevřela. Stejně tak může být soubor nacachovaný někde v paměti.

Je tedy potřeba donutit webserver / aplikaci, aby zapomněla všechny otevřené soubory. To jde udělat restartem. Možná i nějak líp, pokud podporuje reload.
Keeehi
Profil
Stroganov:
Už je to dlouho, takže to nedokážu přesně dohledat, ale myslím, že jsem četl o podobném případu. Když se symlink změnil, webserveru trvalo nějakou dobu, než to "zjistil". Pokud si dobře pamatuji, tsk se to autorovi stávalo jen pokud byl server v zátěži. Řešením myslím bylo vytvořit vedle toho původního linku vytvořit nový link na novou verzi a pak ten nový přejmenovat a tím nahradit ten starý
ln -s /cesta/k/cms2 cms-new
mv cms-new cms
ttttt
Profil *
Keeehi:
Tohle řeší problém, kdy zatížený server přistoupí ve chvíli, kdy se symlink mění. Přepsaní symlinku jsou dva syscally, pokud se vytížený server trefí mezi, symlink neexistuje a server vrátí chybu. Ale moc se mi nezdá, že by to mohlo mít vliv ještě o vteřiny / minuty později.
Kajman
Profil
Jak máte nastavenou tuto proměnnou pro php cache?
www.php.net/manual/en/opcache.configuration.php#ini.opcache.revalidate-path

Případně zkusit po změně symlinků zavolat nachystaný php soubor, ve kterém bude příkaz pro vyčištění této cache.
Stroganov
Profil *
Ďakujem všetkým za odpovede, reštart webservera problém plne rieši.

Vaše odpověď

Mohlo by se hodit

Příspěvky nesouvisející s webem budou odstraněny.

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0