Ubuntu cron job és rsync problémák megoldása – automatikus mentés helyes beállítása

Az Ubuntu Linux rendszerek esetében az automatizált feladatok ütemezése gyakran a cron segítségével történik. Ez lehetővé teszi, hogy bizonyos parancsok előre meghatározott időpontokban fussanak le emberi beavatkozás nélkül. Azonban előfordulhat, hogy egy parancs a terminálból történő futtatáskor megfelelően működik, míg cron job-ból nem az elvárt eredményt adja.

Ebben a cikkben egy konkrét példán keresztül nézzük meg, hogy mi okozhat problémát az rsync használata során egy automatikusan futtatott cron job esetében, és hogyan lehet ezt kijavítani.

Probléma: cron job-ból futtatva az rsync hibásan működik

A következő parancsot szeretnénk automatikusan futtatni cron job-bal egy biztonsági mentéshez:

cd / && rsync -aAXv --delete-during --exclude={"/mnt/**","/dev/","/proc/","/sys/","/tmp/","/run/"} / /mnt/masikparticio/

Ha ezt a parancsot közvetlenül a terminálból futtatjuk, akkor minden rendben működik, és az rsync figyelmen kívül hagyja az /mnt könyvtár tartalmát. Azonban amikor a webmin felületén keresztül cron job-ként indítjuk, akkor az rsync a /mnt/masikparticio mappába elkezdi önmagát másolni, figyelmen kívül hagyva a kizárásokat.

Lehetséges okok és megoldások

Az ilyen jellegű problémák több okra is visszavezethetők. Nézzük meg a leggyakoribbakat és a megoldásokat:

1. A cron job környezeti változói eltérnek a termináltól

A cron job-ok gyakran nem ugyanazzal a környezeti változó beállítással futnak, mint amit egy interaktív terminálban használunk. Ez problémát okozhat bizonyos parancsok végrehajtásánál.

Megoldás: Érdemes a teljes elérési utat megadni az rsync és más parancsok számára. Az which rsync paranccsal ellenőrizhetjük az rsync helyét, például:

/usr/bin/rsync

Ennek megfelelően a cron job-ot így érdemes módosítani:

cd / && /usr/bin/rsync -aAXv --delete-during --exclude={"/mnt/**","/dev/","/proc/","/sys/","/tmp/","/run/"} / /mnt/masikparticio/

2. A cron job nem root felhasználóval fut

Ha az rsync parancsot terminálból root-ként futtatjuk, de a cron job más felhasználóval indul, akkor a jogosultsági különbségek miatt előfordulhat, hogy a parancs nem működik megfelelően.

Megoldás: Ellenőrizzük, hogy a cron job root-ként fut-e. Ha nem, akkor root jogosultsággal kell beállítani a crontab fájlt:

sudo crontab -e

Majd adjuk hozzá a következő bejegyzést:

0 3 * * * /root/biztonsagimentes.sh

3. A cron job naplófájlokban történő ellenőrzése

Ha továbbra sem működik megfelelően, érdemes megnézni a cron job naplóit. Ehhez a következő parancsot használhatjuk:

grep CRON /var/log/syslog

Ez megmutatja, hogy a cron milyen üzeneteket hagyott a naplóban a feladat futtatásával kapcsolatban.

4. A legjobb megoldás: shell script használata

Végül egy másik hatékony megoldás az, hogy nem közvetlenül a cron job-ból futtatjuk az rsync parancsot, hanem egy külön shell scriptet készítünk, amelyben biztosítjuk, hogy minden szükséges környezeti változó és jogosultság megfelelő legyen.

Készítsünk egy új fájlt:

nano /root/biztonsagimentes.sh

Majd másoljuk bele a következő tartalmat:

#!/bin/bash
# Rsync biztonsági mentés
cd /
/usr/bin/rsync -aAXv --delete-during --exclude={"/mnt/**","/dev/","/proc/","/sys/","/tmp/","/run/"} / /mnt/masikparticio/

Ezután tegyük futtathatóvá a fájlt:

chmod +x /root/biztonsagimentes.sh

Majd állítsuk be a cron job-ot, hogy ezt a fájlt futtassa:

0 3 * * * /root/biztonsagimentes.sh

Összegzés

Ha egy rsync alapú biztonsági mentés terminálból megfelelően működik, de cron job-ból futtatva problémák jelentkeznek, annak több oka lehet:

  • A cron környezeti változói eltérhetnek.
  • A parancs nem root-ként fut.
  • A naplókban található hibaüzenetek segíthetnek azonosítani a problémát.
  • A legjobb megoldás egy külön shell script készítése.

Ha a fenti lépéseket követjük, biztosíthatjuk, hogy az rsync mentés mindig megfelelően fusson le, függetlenül attól, hogy terminálból vagy cron job-ból indítjuk.

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük