Voordat u aanpassingen gaat maken in uw webapplicatie, is het altijd raadzaam om een database backup te maken. Mochten zaken anders lopen dan gepland, kunt u namelijk altijd terug naar de originele situatie. Een backup maken van een database is gelukkig erg simpel. Wel dient u de gebruiker, wachtwoord en database bij de hand te hebben.

Backup

Als het om een kleine database gaat kunt u ook via PHPMyAdmin een backup (dump) maken, maar hier loopt u al snel tegen limieten aan. Wij adviseren dan ook om een backup te maken via de shell (SSH):

mysqldump -u <gebruiker> -h localhost -p <database> | gzip -9 > <bestandsnaam>.sql.gz

Met bovenstaande voorbeeld wordt een backup weggeschreven naar een .sql.gz bestand. Doordat dit bestand gecomprimeerd is, zal het bestand een stuk kleiner zijn dan wanneer u een reguliere backup zou maken.

Aandachtspunten:

  • plaats backups altijd buiten de webroot van de website
  • bij een grote database kan een backup enige tijd duren.
  • zorg dat er voldoende vrij diskruimte aanwezig is om de backup te kunnen maken

Restore

Mocht het nodig zijn dat u de bovenstaande backup dient terug te zetten; er zijn verschillende manieren om deze terug te zetten. In alle gevallen dient u goed bewust te zijn van de eventuele risico’s! Wij kiezen ervoor om de bestaande database te verwijderen (met: DROP DATABASE ;) en dan de backup in zijn geheel terug te plaatsen:

zcat <bestandsnaam>.sql.gz | mysql -u <gebruiker> -h localhost -p <database>

Het importeren van een database kan erg lang duren (langer dan een backup maken!). Het kan soms lijken dat er geen vooruitgang is, maar geduld is een schone zaak in dit geval!

Cronjobs zijn taken die periodiek worden uitgevoerd en ingesteld kunnen worden via het commando crontab. Het is een eenvoudige manier om taken automatisch uit te voeren. De basis uitleg over cronjobs kunt u terugvinden in een eerdere blog post op onze website.

Een cronjob kan echter ook een groot probleem voor de server opleveren wanneer een zelfde taak meerdere keren en op het zelfde moment actief is. Een veel voorkomend probleem is, dat een nieuwe taak wordt gestart terwijl de oude nog niet volledig afgerond is.

Als u bijvoorbeeld een cronjob heeft ingesteld die elke 5 minuten een taak uitvoert en die taak eigenlijk 7 minuten nodig heeft om te voltooien, dan zal op minuut 5 de zelfde taak nog een keer gestart worden. Dit heeft als gevolg dat er op dat moment twee de zelfde taken lopen. Het kan zelfs zodanig uit de hand lopen dat bij verkeerde instellingen een taak meer dan 10 – of meer – keer gelijktijdig kan draaien. U kunt zich voorstellen dat dit niet wenselijk is. Zo kan het mogelijk de volgende gevolgen hebben:

  • Datacorruptie; omdat de zelfde taak meerdere keren wordt uitgevoerd kan dat tot vreemde veranderingen leiden in uw (database-)gegevens.
  • Een trage website; omdat alle resources (systeembronnen) van uw server worden aangeroepen. Immers elke draaiende cronjob heeft deze nodig en zal ze reserveren.

Uiteraard kan het zijn dat, het script wat wordt uitgevoerd, zelf al een mechanisme gebruikt om simultaan draaiende processen te voorkomen. In dat geval hoeft u Flock niet te gebruiken. Voor scripts die geen dergelijk mechanisme hebben, is er de volgende oplossen:

Flock

Onze HPW servers zijn standaard uitgerust met de “flock” tool. Deze tool zorgt er voor dat de zelfde cronjob niet meerdere keren gestart kan worden. Dit doet flock door een tijdelijk “lock-” bestand aan te maken. Zo lang dit bestand aanwezig is zal er geen nieuwe taak gestart worden. Wanneer het commando (de cronjob) is uitgevoerd zal flock het tijdelijke bestand verwijderen waardoor er weer een nieuwe taak gestart kan worden. Het gebruik is eenvoudig. Onderstaand een voorbeeld waarbij de standaard Magento cronjob wordt uitgevoerd met behulp van flock:

 */5 * * * * flock -xn "${TMP}cron.php.lock" php -q /var/hpwsites/<user>/website/html/webroot/cron.php >/dev/null 2>&1

Met de “-xn” parameter geeft u aan welk lock bestand er aangemaakt dient te worden. Deze moet verschillen per actieve cronjob. In bovenstaand voorbeeld gebruiken we een systeem variabele ($TMP) in combinatie met de omschrijving “cron.php.lock” wat resulteert in het aanmaken van het volgende lock-bestand “/var/hpwsites/tmp/cron.php.lock”.

Mocht u meer over flock willen weten dan kunt u, wanneer u bent ingelogd op uw HPW server, het volgende commando gebruiken om de handleiding te openen.

man flock

Om makkelijk, snel en efficiënt bestanden te kopiëren van de ene server naar de andere server hebben wij een handige tool voor u beschikbaar, namelijk rsync. Rsync kunt u veilig verschillende keren achter elkaar uitvoeren omdat deze alleen nieuwe en gewijzigde bestanden zal kopiëren.

Pull

Als u alle bestanden en directory’s vanaf de andere server (bijvoorbeeld een ontwikkel-server) wilt downloaden naar uw HPW server, kunt u rsync op deze manier gebruiken:

rsync -avz webmaster@ontwikkel-server.ext:/var/www/html* /var/hpwsites/<gebruiker>/website/html/webroot/

Bovenstaand voorbeeld gaat er vanuit dat:

  • webmaster het account is op de andere server waar u mee bij uw website bestanden kunt komen
  • ontwikkel-server.ext de hostname is van de andere server
  • alle website bestanden staan in in de directory /var/www/html
  • en u <gebruiker> vervang door de gebruikersnaam van uw HPW server

Bovenstaande waarden dient u aan te passen naar de voor u correcte waarden.

Push

Het kan ook voorkomen u bestanden vanaf een andere server wilt uploaden naar een HPW server. Ook hiervoor kunt u rsync gebruiken. Wel zal rsync op de andere server geïnstalleerd moeten zijn en moet er een uitzondering in de firewall van uw HPW server staan.

Om alle bestanden en directory’s vanuit de huidige directory te kopiëren naar de webroot kan je het volgende uitvoeren op de andere server (niet de HPW server):

rsync -avz ./* -e "ssh -p 22622" <gebruiker>@d-xxxxxxx.host-ed.eu:/var/hpwsites/<gebruiker>/website/html/webroot/

Op Linux/Unix systemen wordt gebruik maakt van crontab, een programma welke op gezette tijden processen kan starten. Een cronjob wordt ook wel een “geplande taak” genoemd binnen Windows systemen. Sommige pakketten vereisen het instellen van cronjobs voor een goede werking. Het instellen van cronjobs op een HPW server kunt u zelf doen. Hieronder enkele voorbeelden.

Crontab

crontab -l

Dit commando wordt uitgevoerd met de kleine letter L als argument en toont de door u zelf ingestelde cronjobs. Er zijn ook cronjobs die uitgevoerd worden door de systeemgebruiker. Deze ziet u niet in dit overzicht terug. Het commando doet verder niets anders dan de regels op het scherm tonen.

crontab -e

Wijzig de crontab. Hoewel het instellen relatief eenvoudig is, zijn er wel een aantal zaken waarmee u rekening dient te houden. De mogelijkheden van een cronjob zijn vrij uitgebreid. De opbouw van een cronjob ziet er als volgt uit:

* * * * * /pad/naar/script
| | | | |-- Dag van de week (0-6 waarbij de 0 voor de zondag staat)
| | | |---- Maand (1-12)
| | |------ Dag van de maand (1-31)
| |-------- Uur (0-23)
|---------- Minuut (0-59)

Met een forward-slash ( / ) kun u een interval definiëren (elke 5 minuten, bijvoorbeeld). De komma (,) gebruikt u om verschillende momenten op te geven.

De toevoeging “>/dev/null 2>&1” onderdrukt elke vorm van output (bijvoorbeeld foutmeldingen). Voor cronjobs is dit wenselijk omdat er niets met de output gedaan kan worden.

Voorbeelden

Voer elke dag om 19:00 het script “cron.php” uit:

 0 19 * * * php -q /var/hpwsites/u_gebruiker/website/html/webroot/cron.php >/dev/null 2>&1

Voer het script “cron.php” elke dinsdag en vrijdag om middernacht uit:

0 0 * * 2,5 php -q /var/hpwsites/u_gebruiker/website/html/webroot/cron.php >/dev/null 2>&1

Voer elke 15 minuten het script “cron.php” uit:

*/15 * * * * php -q /var/hpwsites/u_gebruiker/website/html/webroot/cron.php >/dev/null 2>&1

Voer elke twee even maanden, elke werkdag op de even uren het script “cron.php” uit:

* 1-23/2 * */2 1-5 php -q /var/hpwsites/u_gebruiker/website/html/webroot/cron.php >/dev/null 2>&1

Wanneer u het lastig vindt om de taak op de bovenste manier uit te werken, dan kan deze tool u daar wellicht bij helpen: http://www.crontab-generator.org/

De cron editor

Op ons HPW platform wordt het programma “vim” gebruikt om de crontab te wijzigen. Dit is een editor zonder grafische mogelijkheden. Het gebruik is dan ook even wennen. Er zijn een aantal basiscommando’s die u nodig bent.

Nadat u met “crontab -e” de editor heeft geopend, dan kunt u middels het intoetsen van “i” het wijzigen van de crontab starten. U ziet dan rechts onderin “–INSERT–” staan.

Crontab VI voorbeeld

Wanneer u klaar bent met wijzigen drukt u op de “ESC” toets op uw toetsenbord om het wijzigen te stoppen. Vervolgens toetst u een dubbelepunt (:) gevolgd door de letter “x” in. Druk op de “enter” toets om het bestand te sluiten en de wijzigingen op te slaan.

Indien u bang bent dat u een fout heeft gemaakt, kunt u het bestand het beste sluiten door eerst weer uit de wijzigen modes te gaan met de “ESC” toets, dan een dubbelepunt (:) in te voeren gevolgd door de letter q en een uitroepteken (“q!”). Met de “enter” toets sluit u dan het bestand zonder de wijzigingen op te slaan.

Tot slot

Sommige cronjobs worden centraal uitgerold door ons beheersysteem. Deze zullen automatisch worden hersteld als u wijzigingen in de desbetreffende cronjobs maakt. Indien een door ons ingestelde cronjob aangepast dient te worden, neem dan contact met ons op.