Lucaine tette közzé egy ideje kiváló bemutató a cronról és a crontab-ról hogy szerintem érdemes megosztani. A Cron egyfajta megfelelője az ütemezett feladatoknak a Windows rendszerben, csak azt, hogy a terminálról kezeljék. Azok, akik a vizuális felületet részesítik előnyben ugyanazon cél elérése érdekében, láthatják ezt egy másik cikk. |
Mi a cron?
A cron név a görög chronos-ból származik, ami "időt" jelent. A Unix operációs rendszerben a cron egy szokásos háttérfolyamat-kezelő (démon), amely rendszeres időközönként (például minden percben, napban, hétben vagy hónapban) futtatja a folyamatokat vagy a parancsfájlokat. A végrehajtandó folyamatokat és a végrehajtás időpontját a crontab fájl határozza meg.
cómo munkák
A cron démon innen indul /etc/rc.d/ o /etc/init.d az eloszlástól függően. Cron fut a háttérben, percenként ellenőrzi a crontab feladattáblát / etc / crontab Az in / var / spool / cron az elvégzendő feladatok keresésére. Felhasználóként parancsokat vagy parancsfájlokat adhatunk feladatokhoz a cronhoz egyes folyamatok automatizálásához. Ez hasznos például egy rendszer vagy egy jó biztonsági másolat rendszerének frissítéséhez.
Mi a Crontab?
A Crontab egy egyszerű szöveges fájl, amely tárolja a végrehajtandó parancsok listáját a felhasználó által meghatározott időpontban. A Crontab ellenőrzi a parancs vagy a parancs futtatásának dátumát és időpontját, a végrehajtási engedélyeket, és a háttérben teszi. Minden felhasználónak megvan a saját crontab fájlja, valójában a / etc / crontab feltételezzük, hogy ez a root felhasználó crontab fájlja, amikor a normál felhasználók (és még a root is) saját crontab fájlt akarnak létrehozni, akkor a crontab parancsot fogjuk használni.
A Crontab a legegyszerűbb módszer a cron-feladatok kezelésére többfelhasználós rendszereken, akár egyszerű rendszerfelhasználóként, akár root felhasználóként.
A crontab használata
Egy egyszerű példával kezdünk.
Automatizálni fogjuk egy rendszer frissítését, hogy kiküszöböljük a bosszantó "mindig frissítenem kell, és ez nem tetszik!"
Először készítünk egy forgatókönyvet. Ezt a szkriptet a cron hívja meg, és tartalmazni fogja az összes utasítást, amelyet meg akarunk tenni, ezért több esetben és többféleképpen is tesztelni kell, mielőtt a cronba felvennénk, egy ilyen egyszerű frissítő szkript:
#! / bin / bash #script frissítési példa #választja a terjesztést # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Távolítsa el a # számot a disztribúciós sorból. Abban az esetben, ha ez az Ubuntu / Debian, az apt-get paranccsal kezdődik.
A szkriptet update.sh néven mentjük el (pl. A szkriptek az otthoni könyvtárat tárolják). Az említett parancsfájl végrehajtási engedélyeit a következőkkel módosítjuk:
chmod a + x ~ / scripts / update.sh
Néhányszor végrehajtjuk a szkriptet, hogy ellenőrizzük, hogy minden zökkenőmentesen működik-e, módosítjuk a szükségeset (nem tartalmazhat hibákat, különben a cron csak újra és újra megismétel egy hibát). Most adjuk hozzá a feladatot a crontab-hoz.
Feladatok hozzáadása a crontab-hoz
A crontab kiadását a crontab -e segítségével hajtjuk végre, egyes disztrókban (például az Ubuntuban) ez lehetőséget ad arra, hogy kiválasszuk a kívánt szövegszerkesztőt, a többi marad a vi. A crontab fájl ilyennek fog kinézni.
# mh dom mon dow felhasználói parancs
ahol:
- m a szkript végrehajtásának percének felel meg, az érték 0 és 59 között mozog
- h a pontos idő, a 24 órás formátum kezelése, az értékek 0 és 23 között változnak, a 0 pedig 12:00 éjfél.
- dom a hónap napjára utal, például megadhat 15-öt, ha 15 naponta szeretne futni
- dow a hét napját jelenti, lehet numerikus (0–7, ahol 0 és 7 vasárnap), vagy a nap első 3 betűje angolul: hétfő, kedd, sze, cs, péntek, szo, nap.
- használó meghatározza azt a felhasználót, aki végrehajtja a parancsot, lehet root vagy más felhasználó, amennyiben rendelkeznek engedéllyel a szkript végrehajtására.
- parancs a végrehajtandó parancs parancsára vagy abszolút elérési útjára utal, például: /home/usuario/scripts/update.sh, ha szkriptet hív, futtathatónak kell lennie
Hogy tisztázzunk néhány példát a kifejtett cron feladatokról:
15 10 * * * felhasználó /home/user/scripts/update.sh
Minden nap 10: 15-kor futtatja az update.sh parancsfájlt
15 22 * * * felhasználó /home/user/scripts/update.sh
Minden nap 10: 15-kor futtatja az update.sh parancsfájlt
00 10 * * 0 root apt-get -y frissítés Root felhasználó
Minden vasárnap 10:00 órakor frissítést futtat
45 10 * * sun root apt-get -y frissítés
A root felhasználó frissítést futtat minden vasárnap (vasárnap) 10: 45-kor
30 7 20 11 * felhasználó /home/usuario/scripts/update.sh
November 20-án 7: 30-kor a felhasználó futtatja a szkriptet
30 7 11 11 napfelhasználó /home/usuario/scripts/pastel_con_velitas.sh
November 11-én 7: 30-kor és vasárnap a felhasználó megünnepli a rendszergazdáját (vagyis engem)
01 * * * * felhasználó /home/usuario/scripts/molestorecordatorio.sh
Bosszantó emlékeztető minden nap minden órájának minden percében (NEM ajánlott).
Még kezelhetők speciális tartományok:
30 17 * * 1,2,3,4,5
Hétfőtől péntekig minden nap délután fél 5-kor.
00 12 1,15,28
Minden hónap első, tizenötödik és 12. napján 28 órakor (ideális bérszámfejtéshez)
Ha ez zavaró, akkor a crontab fogantyúkat speciális húrok e tartományok meghatározásához.
@reboot Futtasd egyszer, indításkor
@ évente csak évente egyszer fut: 0 0 1 1 *
@évente ugyanaz, mint @évesen
@havi havonta egyszer, az első napon: 0 0 1 * *
@weekly Weekly a hét első órájának első perce. 0 0 * * 0 ″.
@ naponta naponta, 12: 00-kor. 0 0 * * *
@ midnight ugyanaz, mint @daily
@ óránként minden óra első percében: 0 * * * *
Használata nagyon egyszerű.
@hourly felhasználó /home/user/scripts/molestorecordatorio.sh @havi felhasználónk /home/user/scripts/backup.sh @dain root
Végül, de nem utolsó sorban:
Cron munkakezelés
crontab fájl
Cserélje ki a meglévő crontab fájlt egy felhasználó által definiált fájlra
crontab -e
Szerkessze a felhasználó crontab fájlját, minden új sor új crontab feladat lesz.
crontab -l
Sorolja fel a felhasználó összes crontab feladatát
crontab -d
Törölje a felhasználó crontab-ját
crontab -c dir
Meghatározza a felhasználó crontab könyvtárát (ennek felhasználói írási és végrehajtási jogosultságokkal kell rendelkeznie)
crontab -u felhasználó
előtag egy másik felhasználó crontab-jának kezelésére, példák:
$ sudo crontab -l -u gyökér $ sudo crontab -e user2 #crontab -d -u felhasználó
Ez az eszköz, csakúgy, mint sok más, mélyebben és részletesebben megtekinthető:
Uh ... kissé zavaros.
* / 30 hiányzik (a perc mezőben), amely 30 percenként fut ...
Csak ezt akartam kommentálni, amíg úgy döntöttem, hogy átnézem a kommenteket comments
Ez a módosító nagyon fontos információ és nagyon hasznos dolog.
Hello!
Most 45 percenként tesztelek egy konfigurációt.
* / 45 * * * *, és az utasításokat minden óra 45 percében, ÉS óránként hajtják végre. Vagyis:
3: 45-kor, majd 4: 00-kor, 4: 45-kor, majd 5:00, 5:45, 6: 00, 6: 45-kor stb.
Valami bajom van? Mit tehetek úgy, hogy csak 45 percenként, vagy legalább egyszer 45 percenként óránként.
Hello!
Most 45 percenként tesztelek egy konfigurációt.
* / 45 * * * *, és az utasításokat minden óra 45 percében, ÉS óránként hajtják végre. Vagyis:
3: 45-kor, majd 4: 00-kor, 4: 45-kor, majd 5:00, 5:45, 6: 00, 6: 45-kor stb.
Valami bajom van? Mit tehetek úgy, hogy csak 45 percenként, vagy legalább egyszer 45 percenként óránként.
Helló, szuper hasznos információk a cron működésének tisztázására.
Bytes
*
Kiváló, köszönöm, hogy tisztázta a cron működését .. tegyünk egy kis kezet 🙂
Ezt a sort, ahogy értem, 10: 15-kor hajtják végre, javítson ki, ha tévedek
Nos, ez azt írja: 10:15
15 22 * * * felhasználó /home/user/scripts/update.sh
Helló! nagyon jó infó.
Félóránként egy szkript futtatásához a következő sort kell hozzáadni a CronTab-hoz: "30 * * * * root Scrip.sh" Helyes? Nagyon szépen köszönöm!
Nem. Ha jól emlékszem, ehhez meg kell adnod a / 30 * * * * root Scrip.sh fájlt.
Vagyis adjuk hozzá a / előtt 30-at.
Egészségére! Pál.
Helló Tetszett a bejegyzésed, nagyon teljes, de szerettem volna kérdezni valamit.
Problémáim vannak ezzel a paranccsal, és olyan, mint az "at".
Szeretnék futtatni egy szkriptet egy bizonyos időpontban, és feltenni
at -f /home/mi_user/Desk/script.sh 18:08 példa
és a parancsfájl nem a képernyőn, vagyis a terminálon fut, a háttérben fut?
És a cronnal ugyanez történik velem, a "crontab -e" -vel szerkesztem a crontab fájlt
a végén hozzáadom ezt a sort:
46 19 my_user /home/mi_user/Desk/script.sh
és nem csinál semmit, nem mutatja a forgatókönyvet.
Bármilyen javaslat? Köszönöm szépen, és elnézését a kellemetlenségért
A terminál megjelenéséhez előfordulhat, hogy futtatnia kell a terminált, és paraméterként át kell adnia a parancsfájlt.
Például:
lxterminal -e "my_user /home/mi_user/Desktop/script.sh"
A használandó paraméter az Ön által használt terminálemulátortól függően változhat.
Remélem működik.
Ölelés! Pál.
A hozzájárulást értékelik.
10 pont !!
hello2!!
Nagyon köszönöm, nagyon sokat segített tisztázni néhány dolgot, teljes köszönet, további részletekért vagy kérdésekért a FÉRFI OLDALRA megyek, ismételt üdvözletet.
ember nagyon köszönöm, olvastam és teszteltem a példákat. nagyon köszönöm ... nagyon érthető. Egészségére
Az ubuntu Server 12.04.2 LTS-t használtam, és a crontab verzióval rendelkezem, hogy töröljem a felhasználói feladatok listáját, a crontab -r (és -l, ahogy ez a kézikönyv mondja). Biztos, hogy verziók kérdése.
Másrészt egyszer csak a crontab-ot futtattam, és ez a fajta módszer engedte, hogy létrehozzam a saját végrehajtási fájlomat, de nem ezt hajtották végre. Ami fut, az az / etc / crontab fájlban található. talán valaki felhasználja a megjegyzést.
PS (a locate és a whereis crontab segítségével keresek, de csak a fent említett címet és egy másik titkosított fájlt adott vissza, tehát ha az / etc / crontab könyvtárban található, de a crontab -e parancs végrehajtásakor az enyém jelent meg az összes általam definiált feladattal) hol tárolták ezt a fájlt '???? Üdvözlettel. Mindig rootokkal jelentkezem be.
Kiváló, nagyon hasznos !!!
Helló, ezt szeretném megtenni ………… «15 10 * * * root ifdown eth0»
vagyis egy bizonyos időpontban a hálózati kártya kikapcsol ... ... Nos, betettem a crontab-ba, és nem működött ... ... mi van?
Saludos y Gracias
Hiányzott a "mon" meghatározása a "Feladatok hozzáadása a crontab-hoz" cím után
A cikk még mindig szép, a cron rendkívül hasznos.
Milyen klassz volt ez a jó bejegyzés, kérdezz tőlem
Ha nyomon akarom tartani a feladatok végrehajtása során hagyott rekordokat, hol láthatom?
decdir. Szeretném megtekinteni a fájl múltjában végrehajtott műveletek előzményeit, és azt, hogy ki módosította a dátumot
gracias
Ennek módosítási előzményeit szeretném ellenőrizni
hogy tudom megcsinálni
gracias
Jó reggelt,
Azt hiszem, hogy az ubuntu szkriptben hibát követett el, az ap-get -y upgrade-et az apt-get -y upgrade helyett tette. (Hagytál egy t-t).
A köszöntés.
Így van. Köszönöm!
Ölelés! Pál
Szeretném tudni, hogyan lehet létrehozni egy cron fájlt, hogy meg lehessen határozni a végrehajtás időpontját, a könyvtárat stb.
Köszönjük, hogy tisztázta a műveletet és a cron alapvető parancsait, hogy most szórakoztassa magát egy kicsit.
Amikor információt keresek a Gnu / Linux bármely témájáról, körbe-körbe járok, hogy az esetek 90% -ában mindig megtaláljam a legjobb oktatóanyagot ebben a nagy közösségben, úgy gondolom, hogy mostantól kezdem itt, majd máshol.
Üdvözlet
Köszönöm Sander! Egy ölelés! Pál.
dom = a hónap napja
dow = a hét napja
könnyebb, ha társulsz
Köszönöm szépen, nagyon teljes és jól megmagyarázott.
Ugyanezt adta nekünk az OS-tanárom, én nem változtatok semmit, most látom, miért olyan rossz az osztály .-. Nos, ez ugyanaz, mint a házi feladat xD
Becsült,
Lekérdezés, korlátozható-e egy feladat időtartama?
Például van egy olyan feladatom, amely 5 percenként megismétlődik, ismétléskor, ha a feladat még mindig aktív, ölje meg és futtassa újra.
Köszönöm,
Marcelo.-
Helló, Marcelo!
Szerintem jobb lenne, ha ezt a kérdést felvetnéd a hívott kérdés-válasz szolgálatunkban Kérdez DesdeLinux hogy az egész közösség segíthessen a problémájában.
Egy ölelés, Pablo.
jó poszt.
Mi a terminálonkénti parancs a feladatok hozzáadásához a crontab-ba (anélkül, hogy beírná a crontab-ot, és manuálisan hozzáadná őket a „crontab -e” -hez, vagy a crontab-ot egy másik crontab-ra cserélné le a „crontab file” -ra).
Az ötlet egy külső szkript létrehozása, amely hozzáadja a feladatokat a crontab-hoz
Köszönöm
számomra úgy tűnik, hogy használhatna 'visszhangot', amit csak hozzá akar adni '| macska >> 'cronotab elérési útja (/ etc / cronotab)' «
Hogyan futna egy kifejezés pontosan 3 naponta
Hello.
Problémám van egy cron munka végrehajtásával.
A következő feladatot futtatom cronta -e-vel:
01 * * * * root /home/user/script/mfile.sh
de a feladat nem teljesül. Ellenőriztem, hogy a myfile.sh rendelkezik-e végrehajtási engedéllyel, és hogy az azt végrehajtó felhasználó root-e.
Ugyanazt a feladatot futtatom az / etc / crontab fájlban, és a szolgáltatás újraindítása után nekem sem működik.
A myfile.sh tartalma egy parancs, amely frissíti a DB-t, és ha a konzolon futtatom, akkor működik.
van valami ötlet, mi lehet a probléma?
Előfordulhat, hogy az adatbázis felhasználó nem rendelkezik minden jogosultsággal, és először a környezeti változókat kell exportálnia az adatbázis motorjából.
Például a db2-ben ez a sor a szkript elejére kerül
. / home / db2inst1 / sqllib / db2profile
Egy másik ok az lehet, hogy a szkript megköveteli az adatbázishoz való kapcsolódást, a szkripten belül hozza létre a kapcsolatot az adatbázissal
Nem tudtam, hogy újra kell indítanom a tavat, egy ideje ezzel küzdöttem
Tudni fogják, hogyan kell jelezni, hogy a feladatot a hónap minden végén, a megjelölt időpontban futtatják .. A részlet az, hogy nem tudom elérni, mivel tudom, hogy minden hónap utolsó napjára szükség van .. ??? Egyenként kellett leírnom őket, de amikor eljön a február hónap vége, hogy bicikli ez nekem bonyolult ..
jó nap!!
Hogyan állíthatom meg a crontab-ban végrehajtott folyamatot?
folyamat * …………
Lehet, hogy tudsz nekem segíteni? eu tenho um szkript, amelyet Minha írt, amely nem működik, nincs crontab! Jб dei az összes megengedett, nem egy konkrét cron vagy felhasználó, aki végre tudja hajtani - semmi sem történik! Szeretném tudni, tud-e segíteni nekem, néhány más dolog nem működik! Vlws
Hogyan tenné fel a feladatot a hónap minden utolsó napján (napokon: 31-30-28)?
Mint már tudják, a su paranccsal módosíthatják a felhasználókat egy konzolon. Ha a su parancsot így használom: "a felhasználóod" megváltoztatja a felhasználót, de a "felhasználó" megfelelő beállításai nélkül, ha a su-t futtatom: "su - felhasználó", akkor a felhasználói beállítások betöltésével változtassam meg a felhasználót. A cron segítségével jelzem a felhasználót, de hogyan tölthetem be a felhasználó konfigurációit?
És ha le akarom állítani?
Helló,
Nem tudom, mit csinálok rosszul, de követem a lépéseket, és semmi sem kerül végrehajtásra. Megpróbáltam:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * root usr / bin / test.sh
és egyáltalán semmi. Nem hajt végre semmit. Újraindítottam és mindent.
köszönöm szépen