Lūkēns publicēts pirms kāda laika lieliska apmācība par cron un crontab kas, manuprāt, ir vērts dalīties. Cron ir sava veida ekvivalents ieplānotajiem uzdevumiem sistēmā Windows, tikai ar to tiek galā no termināļa. Tie, kas izvēlas vizuālo saskarni, lai sasniegtu to pašu mērķi, to var redzēt cits priekšmets. |
Kas ir cron?
Cron nosaukums cēlies no grieķu valodas chronos, kas nozīmē "laiks". Unix operētājsistēmā cron ir regulārs fona procesu pārvaldnieks (dēmons), kas procesus vai skriptus palaiž regulāri (piemēram, katru minūti, dienu, nedēļu vai mēnesi). Procesi, kas jāizpilda, un to izpildes laiks ir norādīti crontab failā.
COMO darbi
Cron dēmons sākas no /etc/rc.d/ o /etc/init.d atkarībā no sadalījuma. Krona darbojas fonā, katru minūti pārbauda crontab uzdevumu tabulu / etc / crontab o lv / var / spole / cron veicamo uzdevumu meklējumos. Kā lietotājs mēs varam pievienot komandas vai skriptus ar uzdevumiem, lai automatizētu dažus procesus. Tas ir noderīgi, piemēram, lai automatizētu sistēmas atjaunināšanu vai labu dublēšanas sistēmu.
Kas ir Crontab?
Crontab ir vienkāršs teksta fails, kurā glabājas komandu saraksts, kas jāizpilda lietotāja norādītajā laikā. Crontab pārbaudīs skripta vai komandas izpildes datumu un laiku, izpildes atļaujas un to darīs fonā. Katram lietotājam var būt savs crontab fails, patiesībā / etc / crontab tiek pieņemts, ka tas ir root lietotāja crontab fails, kad parastie lietotāji (un pat root) vēlas izveidot savu crontab failu, tad mēs izmantosim komandu crontab.
Crontab ir vienkāršākais veids, kā pārvaldīt cron uzdevumus vairāku lietotāju sistēmās kā vienkāršs sistēmas lietotājs vai root lietotājs.
Izmantojot crontab
Mēs sākam ar vienkāršu piemēru.
Mēs automatizēsim sistēmas atjaunināšanu, lai novērstu kaitinošo tekstu "Man vienmēr ir jāatjaunina, un tas man nepatīk!"
Vispirms mēs izveidosim scenāriju. Šis skripts tiks izsaukts ar cron, un tajā būs visas instrukcijas, kuras mēs vēlamies, lai to izdarītu, tāpēc pirms iekļaušanas cron ir nepieciešams to pārbaudīt vairākos gadījumos un vairākos veidos, šāds vienkāršs atjaunināšanas skripts:
#! / bin / bash #script atjaunināšanas piemērs #izvēlieties izplatīšanu # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Noņemiet # no savas izplatīšanas līnijas. Gadījumā, ja tas ir Ubuntu / Debian, tas sākas ar apt-get.
Mēs saglabājam skriptu kā update.sh (piemēram, skripti direktorē jūsu māju). Mēs mainām minētā skripta izpildes atļaujas ar:
chmod a + x ~ / scripts / update.sh
Mēs pāris reizes izpildām skriptu, lai pārliecinātos, ka viss darbojas nevainojami, mēs pārveidojam nepieciešamo (tajā nedrīkst būt kļūdu, pretējā gadījumā cron kļūdu atkārtos tikai atkal un atkal). Tagad, lai pievienotu uzdevumu mūsu vietnei.
Pievienojiet uzdevumus crontab
Crontab izdevums tiek izpildīts ar crontab -e, dažos distros (piemēram, Ubuntu) tas dod mums iespēju izvēlēties vajadzīgo teksta redaktoru, pārējais mums paliek ar vi. Crontab fails izskatīsies apmēram šādi.
# mh dom mon dow lietotāja komanda
kur:
- m atbilst skripta izpildes minūtei, vērtība svārstās no 0 līdz 59
- h precīzs laiks, tiek apstrādāts 24 stundu formāts, vērtības svārstās no 0 līdz 23, 0 ir 12:00 pusnakts.
- dāvana attiecas uz mēneša dienu, piemēram, varat norādīt 15, ja vēlaties palaist ik pēc 15 dienām
- dow nozīmē nedēļas dienu, tā var būt skaitliska (no 0 līdz 7, kur 0 un 7 ir svētdiena) vai dienas pirmie 3 burti angļu valodā: pirmdiena, otrdiena, trešdiena, ceturtdiena, piektdiena, sestdiena, svētdiena.
- lietotājs definē lietotāju, kurš izpildīs komandu, tā var būt root vai cits lietotājs, ja vien viņiem ir atļaujas izpildīt skriptu.
- komanda attiecas uz komandu vai izpildāmā skripta absolūto ceļu, piemēram: /home/usuario/scripts/update.sh, ja tas izsauc skriptu, tam jābūt izpildāmam
Lai būtu skaidrs, daži izskaidroto cron uzdevumu piemēri:
15 10 * * * lietotājs /home/user/scripts/update.sh
Tas palaidīs skriptu update.sh katru dienu pulksten 10:15
15 22 * * * lietotājs /home/user/scripts/update.sh
Tas katru dienu paliks skriptu update.sh plkst. 10
00 10 * * 0 root apt-get -y atjauninājums Root lietotājs
Tas tiks atjaunināts katru svētdienu plkst. 10:00
45 10 * * saules saknes apt-get -y atjauninājums
Saknes lietotājs atjauninājumu veiks katru svētdienu (svētd.) Plkst. 10
30 7 20 11 * lietotājs /home/usuario/scripts/updata.sh
20. novembrī pulksten 7:30 lietotājs palaidīs skriptu
30 7 11 11 saules lietotājs /home/usuario/scripts/pastel_con_velitas.sh
11. novembrī pulksten 7:30 un tas ir svētdien, lietotājs svinēs savu sysadmin (tas ir, mani)
01 * * * * lietotājs /home/usuario/scripts/molestorecordatorio.sh
Kaitinošs atgādinājums katru stundu katru stundu katru stundu (NAV ieteicams).
Ar tiem joprojām var rīkoties īpašie diapazoni:
30 17 * * 1,2,3,4,5
Katru dienu no pulksten 5:30 pēcpusdienā no pirmdienas līdz piektdienai.
00 12 1,15,28 *
Pulksten 12 katra mēneša pirmajā, piecpadsmitajā un 28. dienā (ideāli piemērots algas aprēķināšanai)
Ja tas ir mulsinoši, crontab rokturi īpašas virknes, lai definētu šos diapazonus.
@reboot Palaidiet vienreiz, startējot
@gadu darbojas tikai reizi gadā: 0 0 1 1 *
@gadīgi tāds pats kā @gadīgi
@ mēnesī notiek reizi mēnesī, pirmajā dienā: 0 0 1 * *
@ katru nedēļu nedēļas pirmās stundas pirmā minūte. 0 0 * * 0 ″.
@ katru dienu, plkst. 12:00. 0 0 * * *
@pusnakts tāds pats kā @daily
@ stundas laikā katras stundas pirmajā minūtē: 0 * * * *
Tās izmantošana ir ļoti vienkārša.
@hourly lietotājs /home/user/scripts/molestorecordatorio.sh @mēneša lietotājs /home/user/scripts/backup.sh
Pēdējais bet ne sliktākais:
Cron darba vadība
crontab fails
Nomainiet esošo crontab failu ar lietotāja definētu failu
crontab -e
Rediģējiet lietotāja crontab failu, katra jaunā rinda būs jauns crontab uzdevums.
crontab -l
Uzskaitiet visus lietotāja crontab uzdevumus
crontab -d
Izdzēsiet lietotāja crontab
crontab -c rež
Definē lietotāja crontab direktoriju (tam ir jābūt lietotāja rakstīšanas un izpildes atļaujām)
crontab -u lietotājs
prefikss, lai apstrādātu cita lietotāja vietni, piemēri:
$ sudo crontab -l -u sakne $ sudo crontab -e user2 #crontab -d -u lietotājs
Šis rīks, tāpat kā daudzi citi, ir padziļināti un detalizētāk apskatāms:
Uh ... mazliet mulsinoši.
* / 30 nav (laukā minūtes), kas darbojas ik pēc 30 minūtēm ...
Tieši to es gatavojos komentēt, līdz nolēmu pārskatīt komentārus 😀
Šis modifikators ir ļoti svarīga informācija un kaut kas ļoti noderīgs.
Labdien!
Šobrīd es testēju konfigurāciju ik pēc 45 minūtēm.
* / 45 * * * *, un instrukcija tiek izpildīta 45 minūtes katru stundu UN katru stundu. Proti:
Tas darbojas 3:45, pēc tam 4:00, 4:45, pēc tam 5:00, 5:45, 6:00, 6:45 utt.
Man kaut kas nav kārtībā? Ko es varu darīt, lai tas notiktu tikai ik pēc 45 minūtēm vai vismaz reizi 45 minūtēs katru stundu.
Labdien!
Šobrīd es testēju konfigurāciju ik pēc 45 minūtēm.
* / 45 * * * *, un instrukcija tiek izpildīta 45 minūtes katru stundu UN katru stundu. Proti:
Tas darbojas 3:45, pēc tam 4:00, 4:45, pēc tam 5:00, 5:45, 6:00, 6:45 utt.
Man kaut kas nav kārtībā? Ko es varu darīt, lai tas notiktu tikai ik pēc 45 minūtēm vai vismaz reizi 45 minūtēs katru stundu.
Sveiki, super noderīga informācija, lai precizētu, kā darbojas cron.
Baiti
priekš *
Lieliski, paldies, ka noskaidrojāt, kā cron darbojas .. pieliksim nelielu roku 🙂
Šī rinda, kā es saprotu, tiks izpildīta pulksten 10:15, izlabojiet mani, ja kļūdos
Nu tur rakstīts 10:15
15 22 * * * lietotājs /home/user/scripts/update.sh
Sveiki! ļoti laba info.
Lai skriptu izpildītu ik pēc pusstundas, rinda, kas jāpievieno CronTab, būtu: "30 * * * * root Scrip.sh" Vai pareizi? Liels tev paldies!
Nē. Ja es pareizi atceros, tam ir jāievieto / 30 * * * * root Scrip.sh.
Tas ir, pievienojiet / pirms 30.
Priekā! Pāvils.
Sveiki, man patika jūsu ziņa, tā ir ļoti pilnīga, bet es gribēju jums kaut ko pajautāt.
Man ir problēmas ar šo komandu un tādu kā "at".
Es gribu izpildīt skriptu noteiktā laikā, un es to ievietoju
at -f /home/mi_user/Desktop/script.sh 18:08 piemērs
un skripts netiek izpildīts ekrānā, tas ir, terminālā, vai tas tiek izpildīts fonā?
Un ar cron tas pats notiek ar mani, es rediģēju crontab failu ar "crontab -e"
beigās es pievienoju šo rindu:
46 19 my_user /home/mi_user/Desk/script.sh
un tas neko nedara, neparāda skriptu.
Kādi ieteikumi? Liels paldies un atvainojos par sagādātajām neērtībām
Lai parādītu termināli, jums, iespējams, būs jāpalaiž termināls un jānodod skripts kā parametrs.
Piemēram:
lxterminal -e "my_user /home/mi_user/Desktop/script.sh"
Izmantojamais parametrs var atšķirties atkarībā no izmantotā termināļa emulatora.
Es ceru, ka tas izdosies.
Apskāviens! Pāvils.
Ieguldījums tiek novērtēts.
10 punkti !!
sveiks2!!
Liels paldies, tas man ļoti palīdzēja precizēt dažas lietas, kopīgu paldies, lai iegūtu sīkāku informāciju vai jautājumus, kurus es apmeklēšu MAN PAGE, atkārtoti sveicieni.
vīrietis liels paldies, es lasīju un pārbaudīju piemērus. liels paldies ... tas ir ļoti saprotams. Priekā
Es izmantoju ubuntu Server 12.04.2 LTS, un man ir pieejamā crontab versija, lai izdzēstu lietotāja darba sarakstu, crontab -r (un -l, kā teikts šajā rokasgrāmatā). Protams, tas ir jautājums par versijām.
No otras puses, es reiz palaidu tikai crontab un šāda veida ļāva man izveidot savu izpildes failu, bet tas netika izpildīts. Darbojas tas, kas atrodas mapē / etc / crontab. varbūt kāds izmantos komentāru.
PS (Es meklēju ar locate un whereis crontab, bet tas atgrieza tikai iepriekš minēto adresi un citu failu, kas ir šifrēts, tādēļ, ja izpildītais bija fails / etc / crontab, bet, izpildot komandu crontab -e, parādīsies mans ar visiem manis definētajiem darbiem) kur tika glabāts šis fails '???? Sveicieni. Es vienmēr piesakos ar root.
Izcili, ļoti noderīgi !!!
Labdien, es vēlētos to izdarīt ... 15 10 * * * saknes ifdown eth0 »
tas nozīmē, ka noteiktā laikā tīkla karte ir izslēgta ... labi, es to ievietoju crontab un tas nedarbojās ... ... kas notiek?
Sveicieni un paldies
Jūs nokavējāt definēt "mon" pēc nosaukuma "Add task to crontab"
Raksts joprojām ir jauks, cron ir ārkārtīgi noderīgs.
Cik foršs bija tas labais ieraksts, jautājiet man
Ja es vēlos sekot uzskaitei, ko atstāj uzdevumu izpilde, kur es to varu redzēt?
ir decdir Es gribu redzēt šī faila pagātnē veikto darbību vēsturi un vēlos redzēt, kurš to ir modificējis, un datums
paldies
Es vēlos pārbaudīt šī modifikāciju vēsturi
kā es to varu izdarīt
paldies
Labrīt,
Es domāju, ka Ubuntu skriptā esat kļūdījies, bet ap-get -y jaunināšanas vietā esat ievietojis ap-get -y jauninājumu. (Jūs esat atstājis t).
Sveiciens.
Tā arī ir. Paldies!
Apskāviens! Pāvils
Es gribu zināt, kā izveidot cron failu, lai varētu norādīt laiku, kad tas tiek izpildīts, direktoriju utt.
Paldies, ka precizējāt operāciju un cron pamata komandas, lai mazliet izklaidētu sevi.
Ikreiz, kad meklēju informāciju par jebkuru ar Gnu / Linux saistītu tēmu, es turpinu visu laiku, lai 90% gadījumu vienmēr atrastu labāko apmācību šajā lieliskajā kopienā, es domāju, ka turpmāk es sākšu šeit un tad citur.
Sveicieni
Paldies Sander! Apskāviens! Pāvils.
dom = mēneša diena
dow = nedēļas diena
tas ir vieglāk, ja jūs asociējaties
Liels paldies, ļoti pilnīgs un labi izskaidrots.
Tas ir tas pats, ko mums deva mans OS skolotājs, es neko nemainu, tagad es redzu, kāpēc klase ir tik slikta .-. Nu, tas ir tas pats, kas mājas darbs xD
Paredzamais,
Vaicājums, vai uzdevuma ilgumu var ierobežot?
Piemēram, man ir uzdevums, kas tiek atkārtots ik pēc 5 minūtēm, atkārtojot, ja šis uzdevums joprojām ir aktīvs, nogaliniet to un palaidiet vēlreiz.
Paldies,
Marselo. -
Sveiks, Marselo!
Es domāju, ka būtu labāk, ja jūs izvirzītu šo jautājumu mūsu zvanīto jautājumu un atbilžu dienestā Jautājiet FromLinux lai visa sabiedrība varētu jums palīdzēt ar jūsu problēmu.
Apskāviens, Pablo.
labs amats.
Kāda ir komanda katram terminālim, lai pievienotu uzdevumus crontab (neievadot crontab un manuāli tos nepievienojot ar “crontab -e” vai aizstājot crontab ar citu crontab ar “crontab file”).
Ideja ir izveidot ārēju skriptu, lai uzdevumus pievienotu crontab
Gracias
man šķiet, ka jūs varētu izmantot 'atbalss', ko vēlaties pievienot '| kaķis >> 'kronotaba ceļš (/ etc / cronotab)' «
Kā izteiksme darbotos tieši ik pēc 3 dienām
Sveiki.
Man ir problēmas izpildīt cron darbu.
Es izpildu šādu uzdevumu ar cronta -e:
01 * * * * sakne /home/user/script/myfile.sh
bet uzdevums nav izdarīts. Esmu pārbaudījis, vai myfile.sh ir izpildes atļauja un vai lietotājs, kurš to izpilda, ir root.
Es izpildu to pašu uzdevumu mapē / etc / crontab un pēc pakalpojuma restartēšanas tas nedarbojas arī man.
Myfile.sh saturs ir komanda, kas atjaunina DB, un, ja es to palaidu konsolē, tā darbojas.
kāda ideja, kāda var būt problēma?
Visticamāk, ka datu bāzes lietotājam nav visu atļauju, un vispirms jums būs jāeksportē vides mainīgie no datu bāzes dzinēja.
Piemēram, db2, šī rinda iet uz skripta sākumu
. / home / db2inst1 / sqllib / db2profile
Cits iemesls varētu būt tāds, ka skriptam ir nepieciešams savienojums ar datu bāzi, izveidojiet savienojumu ar datu bāzi skripta ietvaros
Es nezināju, ka man ir jārestartē dīķis, es kādu laiku ar to cīnījos
Viņi zinās, kā norādīt, ka uzdevums tiek izpildīts katru mēneša beigām, norādītajā laikā .. sīkāk ir tas, ka es nevaru sasniegt to, kā es to zinu, lai ņemtu katra mēneša pēdējo dienu .. ??? Man nācās tos pierakstīt pa vienam, bet, kad pienāk februāra mēneša beigas, ka tas ir divritenis, man tas ir sarežģīti ..
laba diena!!
Kā es varu pārtraukt procesu, kas tiek izpildīts crontab?
process * …………
Vai var būt, ka jūs varat man palīdzēt? es tenho um skripts, ko autore minha, kas nedarbojas, nav crontab! jб dei visi atļautie, neviens privāts īpašnieks vai lietotājs, kas to var izpildīt, - nekas nenotiek! Es gribētu uzzināt, vai jūs varat man palīdzēt, dažas citas lietas nedarbojas! Vlws
Kā jūs liktu uzdevumu izpildīt katru mēneša pēdējo dienu (dienas: 31-30-28)?
Kā jūs jau zināt, komandu su izmanto, lai mainītu lietotāju konsolē. Ja es izmantoju komandu su šādi: "jūsu lietotājs" maina lietotāju, bet bez atbilstošiem "lietotāja" iestatījumiem, ja es palaidu su kā: "su - lietotājs", mainiet lietotāju, ielādējot lietotāja iestatījumus. Ar cron es norādu lietotāju, bet kā es varu ielādēt šī lietotāja iestatījumus?
Un, ja es vēlos to apturēt?
Hello,
Es nezinu, ko daru nepareizi, bet es izpildu soļus, un nekas netiek izpildīts. ES esmu mēģinājis:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * saknes usr / bin / test.sh
un vispār neko. Tas neko neizpilda. Esmu pārstartējis un viss.
ļoti pateicos