Android

Pag-iskedyul ng mga trabaho sa cron na may crontab

Learning - Unix Cron Job in Docker container with Python, bash and NodeJs

Learning - Unix Cron Job in Docker container with Python, bash and NodeJs

Talaan ng mga Nilalaman:

Anonim

Ang Cron ay isang daemon sa pag-iskedyul na nagsasagawa ng mga gawain sa tinukoy na agwat. Ang mga gawaing ito ay tinatawag na mga cron job at kadalasang ginagamit upang awtomatiko ang pagpapanatili ng system o pangangasiwa.

Halimbawa, maaari kang magtakda ng trabaho sa cron upang awtomatiko ang paulit-ulit na mga gawain tulad ng pag-back up ng mga database o data, pag-update ng system gamit ang pinakabagong mga patch ng seguridad, suriin ang paggamit ng puwang sa disk, pagpapadala ng mga email at iba pa. Ang ilang mga aplikasyon, tulad ng Drupal o Magento, ay nangangailangan ng mga trabaho sa cron upang maisagawa ang ilang mga gawain.

Ang mga trabaho sa cron ay maaaring naka-iskedyul na magpatakbo ng isang minuto, oras, araw ng buwan, buwan, araw ng linggo o anumang kumbinasyon ng mga ito.

Ano ang File ng Crontab

Ang Crontab (talahanayan ng cron) ay isang text file na tumutukoy sa iskedyul ng mga trabaho sa cron. Mayroong dalawang uri ng mga file ng crontab. Ang malawak na system ng mga file na crontab at mga indibidwal na file ng crontab ng gumagamit.

Ang mga file ng crontab ng mga gumagamit ay nakaimbak ng pangalan ng gumagamit, at ang kanilang lokasyon ay nag-iiba sa pamamagitan ng mga operating system. Sa sistemang batay sa Red Hat tulad ng CentOS, ang mga file ng crontab ay naka-imbak sa direktoryo /var/spool/cron habang sa mga file na Debian at Ubuntu ay naka-imbak sa direktoryo /var/spool/cron/crontabs .

Kahit na maaari mong mai-edit nang manu-mano ang mga file ng crontab, inirerekumenda na gamitin ang utos ng crontab .

/etc/crontab at ang mga file sa loob ng /etc/cron.d direktoryo ay mga file na lapad ng mga file na crontab na mai-edit lamang ng mga administrador ng system.

Sa karamihan ng mga pamamahagi ng Linux maaari ka ring maglagay ng mga script sa loob ng /etc/cron.{hourly, daily, weekly, monthly} at ang mga script ay isinasagawa tuwing hour/day/week/month .

Crontab Syntax at Operator

Ang bawat linya sa file ng crontab ng gumagamit ay naglalaman ng anim na mga patlang na pinaghiwalay ng isang puwang na sinusundan ng utos na tatakbo.

* * * * * command(s) - - - - - | | | | | | | | | ----- Day of week (0 - 7) (Sunday=0 or 7) | | | ------- Month (1 - 12) | | --------- Day of month (1 - 31) | ----------- Hour (0 - 23) ------------- Minute (0 - 59)

Ang unang limang patlang ay maaaring maglaman ng isa o higit pang mga halaga, na pinaghiwalay ng isang kuwit o isang hanay ng mga halaga na pinaghiwalay ng isang hyphen.

  • * -Ang asterisk operator ay nangangahulugang anumang halaga o palaging. Kung mayroon kang simbolo ng asterisk sa larangan ng Hour, nangangahulugan ito na ang gawain ay isasagawa bawat oras. , -Pinahihintulutan ka ng operator ng komma na tukuyin ang isang listahan ng mga halaga para sa pag-uulit. Halimbawa, kung mayroon kang 1, 3, 5 sa larangan ng Hour, ang gawain ay tatakbo ng 1:00, 3 am at 5 am. - -Ang pinapayagan ka ng operator ng hyphen na tukuyin ang isang hanay ng mga halaga. Kung mayroon kang 1-5 sa Araw ng patlang ng linggo, ang gawain ay tatakbo tuwing Linggo (Mula Lunes hanggang Biyernes). / -Ang nagpapahintulot sa iyo ng slash operator na tukuyin ang mga halaga na uulitin sa isang tiyak na agwat sa pagitan nila. Halimbawa, kung mayroon kang */4 sa larangan ng Hour, nangangahulugan ito na isasagawa ang pagkilos tuwing apat na oras. Ito ay katulad ng pagtukoy ng 0, 4, 8, 12, 16, 20 . Sa halip na asterisk bago ang slash operator, maaari mo ring gamitin ang isang hanay ng mga halaga, ang 1-30/10 nangangahulugang pareho ng 1, 11, 21 .

System-wide Crontab Files

Ang syntax ng mga system-wide crontab file ay bahagyang naiiba kaysa sa mga crontabs ng gumagamit. Naglalaman ito ng isang karagdagang ipinag-uutos na patlang ng gumagamit na tumutukoy kung aling gumagamit ang tatakbo sa trabaho ng cron.

* * * * * command(s) * * * * * command(s)

Predefined Macros

Mayroong maraming mga espesyal na iskedyul ng Cron na ginamit upang tukuyin ang mga karaniwang agwat. Maaari mong gamitin ang mga shortcut na ito sa lugar ng pagtutukoy ng limang haligi ng petsa.

  • @yearly (o @annually ) - Patakbuhin ang tinukoy na gawain minsan sa isang taon sa hatinggabi (12:00 am) ng ika-1 ng Enero. Katumbas sa 0 0 1 1 * . @monthly - Patakbuhin ang tinukoy na gawain isang beses sa isang buwan sa hatinggabi sa unang araw ng buwan. Katumbas sa 0 0 1 * * . @weekly - Patakbuhin ang tinukoy na gawain isang beses sa isang linggo sa hatinggabi sa Linggo. Katumbas sa 0 0 * * 0 . @daily - Patakbuhin ang tinukoy na gawain isang beses sa isang araw sa hatinggabi. Katumbas sa 0 0 * * * . @hourly - Patakbuhin ang tinukoy na gawain isang beses sa isang oras sa simula ng oras. Katumbas sa 0 * * * * . @reboot - Patakbuhin ang tinukoy na gawain sa system startup (boot-time).

Utos ng Crontab ng Linux

Pinapayagan ka ng crontab na utos na mag-install o magbukas ng isang crontab file para sa pag-edit.

Maaari mong gamitin ang utos ng crontab upang tingnan, madagdagan, alisin, o baguhin ang mga trabaho sa cron gamit ang mga sumusunod na pagpipilian:

  • crontab -e - I-edit ang crontab file, o lumikha ng isa kung hindi ito umiiral. crontab -l - Ipakita ang mga nilalaman ng file ng crontab. crontab -r - Alisin ang iyong kasalukuyang crontab file. crontab -i - Alisin ang iyong kasalukuyang crontab file na may isang mabilis bago alisin. crontab -u - I-edit ang iba pang paggamit ng crontab file. Nangangailangan ng mga pribilehiyo ng administrator ng system.

Binubuksan ng utos ng crontab ang file ng crontab gamit ang editor na tinukoy ng VISUAL o EDITOR variable variable.

Mga variable ng Crontab

Ang cron daemon ay awtomatikong nagtatakda ng maraming variable ng kapaligiran.

  • Ang default na landas ay nakatakda sa PATH=/usr/bin:/bin . Kung ang utos na iyong tinawag ay naroroon sa tinukoy na landas ng cron, maaari mo ring gamitin ang ganap na landas sa utos o baguhin ang variable na cron $PATH . Hindi mo maaaring tahasang magdagdag ng :$PATH tulad ng gagawin mo sa isang regular na script.Ang default na shell ay nakatakda sa /bin/sh . Maaari kang magtakda ng isang iba't ibang mga shell sa pamamagitan ng pagpapalit ng variable ng SHELL.Cron hinihingi ang utos mula sa direktoryo ng bahay ng gumagamit. Ang variable ng HOME maaaring ma-overridden sa pamamagitan ng mga setting sa crontab. Ang email na notification ay ipinadala sa may-ari ng crontab. Upang ma-overwrite ang default na pag-uugali, maaari mong gamitin ang variable ng kapaligiran MAILTO may isang listahan (hiwalay ang comma) ng lahat ng mga email address na nais mong matanggap ang mga abiso sa email. Kung ang MAILTO ay tinukoy ngunit walang laman ( MAILTO="" ), walang ipinadala na mail.

Mga Paghihigpit sa Crontab

Maaaring kontrolin ng mga administrador ng system kung aling mga gumagamit ang may access sa crontab utos sa pamamagitan ng paggamit ng /etc/cron.deny at /etc/cron.allow file. Ang mga file ay binubuo ng isang listahan ng mga usernames, isang pangalan ng gumagamit bawat linya.

Sa pamamagitan ng default lamang ang /etc/cron.deny file ay umiiral at walang laman, na nangangahulugang ang lahat ng mga gumagamit ay maaaring gumamit ng utos ng crontab. Kung nais mong tanggihan ang pag-access sa mga utos ng crontab sa isang tukoy na gumagamit, idagdag ang username sa file na ito.

Kung ang /etc/cron.allow file ay umiiral lamang ang mga gumagamit na nakalista sa file na ito ay maaaring gumamit ng crontab command.

Kung wala man ang file, tanging ang mga gumagamit na may mga pribilehiyong administratibo ay maaaring gumamit ng crontab command.

Mga Halimbawa ng Mga Trabaho ng Cron

Nasa ibaba ang ilang mga halimbawa ng trabaho sa cron na magpapakita sa iyo kung paano mag-iskedyul ng isang gawain na tatakbo sa iba't ibang mga tagal ng oras.

  • Magpatakbo ng isang utos sa 15:00 sa bawat araw mula Lunes hanggang Biyernes:

    0 15 * * 1-5 command

    Patakbuhin ang isang script tuwing 5 minuto at nai-redirect ang standard na output upang dev null , tanging ang karaniwang error ay maipapadala sa tinukoy na e-mail address:

    [email protected] */5 * * * * /path/to/script.sh > /dev/null

    Patakbuhin ang dalawang utos tuwing Lunes sa 3:00 (gamitin ang operator at && pagitan ng mga utos):

    0 15 * * Mon command1 && command2

    Patakbuhin ang isang script ng PHP tuwing 2 minuto at isulat ang output sa isang file:

    */2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log

    Magpatakbo ng isang script araw-araw, bawat oras, sa oras, mula 8:00 hanggang 4 ng hapon:

    00 08-16 * * * /path/to/script.sh

    Magpatakbo ng isang script sa unang Lunes ng bawat buwan, alas-7 ng umaga

    0 7 1-7 * 1 /path/to/script.sh

    Patakbuhin ang isang script sa 9:15 pm, sa ika-1 at ika-15 ng bawat buwan:

    15 9 1, 15 * * /path/to/script.sh

    Itakda ang mga pasadyang HOME , PATH , SHELL at MAILTO variable at magpatakbo ng isang utos bawat minuto.

    HOME=/opt PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SHELL=/usr/bin/zsh [email protected] */1 * * * * command

Konklusyon

Nalaman mo kung paano lumikha ng mga trabaho sa cron at mga iskedyul ng mga gawain sa isang tukoy na petsa at oras.

Huwag mag-atubiling mag-iwan ng komento kung mayroon kang mga katanungan.

terminal ng cron crontab