මගේ ක්‍රොන්ටාබ් ක්‍රියා නොකරන්නේ ඇයි, මම එය නිරාකරණය කරන්නේ කෙසේද?


247

මෙය ක්‍රොන් සහ ක්‍රොන්ටාබ් භාවිතා කිරීම පිළිබඳ කැනොනිකල් ප්‍රශ්නයකි .

ඔබව මෙහි යොමු කර ඇත්තේ ඔබේ ප්‍රශ්නයට පිළිතුර පහතින් සොයාගත හැකි බවට ප්‍රජාව තරමක් විශ්වාස කරන බැවිනි. ඔබගේ ප්‍රශ්නයට පහතින් පිළිතුරු නොලැබුනේ නම්, එම පිළිතුරු ඔබට ප්‍රජාවට උදව් වන තොරතුරු රැස් කිරීමට උපකාරී වේ. මෙම තොරතුරු ඔබේ මුල් ප්‍රශ්නයට සංස්කරණය කළ යුතුය.

' මගේ ක්‍රොන්ටාබ් ක්‍රියා නොකරන්නේ ඇයි, සහ එය නිරාකරණය කරන්නේ කෙසේද?' 'පහත දැක්වේ. මෙය cronඉස්මතු කර ඇති crontab සමඟ පද්ධතිය ආමන්ත්‍රණය කරයි.


2
AskUbuntu හි ක්‍රොන්ටාබ් ක්‍රියා නොකිරීමට මෙය විශාල හේතුයකි.
ඩෑන් ඩස්කල්ස්කු

1
An ඩැන්ඩස්කල්ස්කු එරික්ට වැඩි ප්‍රතිචාරයක් ලබා ගත යුතු බවක් පෙනේ
මම වඩාත්ම මෝඩ පුද්ගලයා

1
මම දැන් සර්වර් ෆෝල්ට් එස්ඊ සමඟ සම්බන්ධ වී සිටිමි (එබැවින් නියෝජිතයින් 101 ක් පමණි), නමුත් මෙම ප්‍රශ්නයට -1 ලබා දීමට කැමතියි !! මෙම ප්‍රශ්නය යොමු කර ඇත්තේ නියෝජිතයින් ලබා ගැනීම සඳහා පමණක්ද? AmIamtheMostStupidPerson ඔබ සමඟ සම්පුර්ණයෙන්ම එකඟයි ...
කුෂ්රාජ් රාතෝඩ්

අවුරුදු 13 ක් වයසැති මෙම පදවාන්වරුන්ගේ බටහිර මතවාදය සුපර්නෝවා වැනි පෙළපොත් සහ අන්ධ කිරීම යන දෙකම වේ. ඔබගේ ප්‍රශ්න දෙකටම පිළිතුරු සැපයීම සඳහා: ඔව්, මම එය කළේ නියෝජිතයා වෙනුවෙන් වන අතර ඔව්, එරික්ට වැඩි කීර්තියක් ලබා ගත යුතුය. මට තව කොපමණ නියෝජිතයෙක් අවශ්‍යද ?? තවත්. youtu.be/IaDt9T7BF38?t=262
එරික් ලෙස්චින්ස්කි

Answers:


353

ඔබගේ සියලු ක්‍රොන්ටාබ් ආශ්‍රිත දුක් කරදර / ගැටලු (ලිනක්ස්) විසඳන්නේ කෙසේද?


මෙය ප්‍රජා විකියකි , මෙම පිළිතුරෙහි කිසියම් වැරැද්දක් ඔබ දුටුවහොත් හෝ අමතර තොරතුරු තිබේ නම් කරුණාකර එය සංස්කරණය කරන්න.


පළමුව, මූලික පාරිභාෂිතය:

  • cron (8) යනු නියමිත විධාන ක්‍රියාත්මක කරන ඩීමන් ය.
  • crontab (1) යනු පරිශීලක crontab (5) ගොනු වෙනස් කිරීමට භාවිතා කරන වැඩසටහනයි.
  • crontab (5) යනු ක්‍රෝන් (8) සඳහා උපදෙස් අඩංගු එක් පරිශීලක ගොනුවකි.

ඊළඟට, ක්‍රෝන් පිළිබඳ අධ්‍යාපනය:

පද්ධතියක සිටින සෑම පරිශීලකයෙකුටම තමන්ගේම crontab ගොනුවක් තිබිය හැකිය. මූලයේ පිහිටීම සහ පරිශීලක ක්‍රොන්ටාබ් ලිපිගොනු පද්ධතිය මත රඳා පවතින නමුත් ඒවා සාමාන්‍යයෙන් පහළින් ඇත /var/spool/cron.

පද්ධතිය පුරා ඇති /etc/crontabගොනුවක් ඇත, /etc/cron.dනාමාවලියෙහි ක්‍රොන්ටාබ් කොටස් අඩංගු විය හැකි අතර ඒවා කියවා ක්‍රෝන් මඟින් ක්‍රියා කරයි. සමහර ලිනක්ස් බෙදාහැරීම් (උදා /etc/cron.{hourly,daily,weekly,monthly}.

root සෑම විටම crontab විධානය භාවිතා කළ හැකිය; නිත්‍ය පරිශීලකයින්ට ප්‍රවේශය ලබා දිය හැකිය. ඔබ crontab -eක්‍රොන්ටාබ් ගොනුව විධානය සමඟ සංස්කරණය කර එය සුරකින විට, ක්‍රොන්ඩ් එය මූලික වලංගු භාවය සඳහා පරික්ෂා කරයි, නමුත් ඔබේ ක්‍රොන්ටාබ් ගොනුව නිවැරදිව පිහිටුවා ඇති බවට සහතික නොවේ. cron.denyකුමන පරිශීලකයින්ට ක්‍රෝන් භාවිතා කළ නොහැකිදැයි සඳහන් කරන ගොනුවක් ඇත. මෙම cron.denyගොනුව ස්ථානය පද්ධතිය රඳා පවතින හා සියළු පරිශීලකයන් cron වලින් භාවිතා කිරීමට ඉඩ ඇත මකාදැමිය නොහැක.

පරිගණකය ක්‍රියාත්මක නොවන්නේ නම් හෝ ක්‍රවුන් ඩීමන් ක්‍රියාත්මක නොවන්නේ නම් සහ විධානයක් ක්‍රියාත්මක වීමට දිනය / වේලාව ගෙවී ගොස් තිබේ නම්, ක්‍රොන්ඩ් විසින් අතීත විමසුම් අල්ලාගෙන ධාවනය නොවේ.

crontab විස්තර, විධානයක් සකස් කරන්නේ කෙසේද:

Crontab විධානයක් තනි පේළියකින් නිරූපණය කෙරේ. \බහු පේළි හරහා විධානයක් දිගු කිරීමට ඔබට භාවිතා කළ නොහැක . හැෂ් ( #) ලකුණ නිරූපණය කරන්නේ එම රේඛාවේ ඇති ඕනෑම දෙයක් ක්‍රෝන් විසින් නොසලකා හරිනු ඇත. ප්‍රමුඛ සුදු අවකාශය සහ හිස් රේඛා නොසලකා හරිනු ලැබේ.

%ඔබගේ විධානයෙහි ප්‍රතිශත ( ) ලකුණ භාවිතා කිරීමේදී ඉතා ප්‍රවේශම් වන්න . ඔවුන් පැන \%නොගියහොත් ඒවා නව රේඛා බවට පරිවර්තනය වන අතර පළමු වරට පැන %නොගිය පසු සියල්ල ඔබගේ විධානයට stdin මත ලබා දෙනු ලැබේ.

Crontab ගොනු සඳහා ආකෘති දෙකක් තිබේ:

  • පරිශීලක crontabs

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
    # |  |  |  |  |
    # *  *  *  *  *   command to be executed
    
  • පද්ධති පුළුල් /etc/crontabහා /etc/cron.dකොටස්

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    

දෙවැන්න පරිශීලක නාමයක් අවශ්‍ය බව සලකන්න. විධානය නම් කරන ලද පරිශීලකයා ලෙස ක්‍රියාත්මක වේ.

රේඛාවේ පළමු ක්ෂේත්‍ර 5 මඟින් විධානය ක්‍රියාත්මක කළ යුතු කාලය (ය) නිරූපණය කෙරේ. කාල පිරිවිතරයෙන් ඔබට අංක හෝ අදාළ දින / මාස නම් භාවිතා කළ හැකිය.

  • ක්ෂේත්ර අවකාශ හෝ ටැබ් මගින් වෙන් කරනු ලැබේ.
  • ,ලැයිස්තුවක් නියම කිරීමට කොමාව ( ) භාවිතා කරයි. උදා: 1,4,6,8, එයින් අදහස් වන්නේ 1,4,6,8.
  • -පරාසයන් ඉරක් ( ) සමඟ නිශ්චිතව දක්වා ඇති අතර ඒවා ලැයිස්තු සමඟ ඒකාබද්ධ කළ හැකිය. උදා: 1-3,9-12, එයින් අදහස් වන්නේ 1 සහ 3 අතර 9 සිට 12 දක්වා.
  • මෙම /චරිතය සෑම 5 (2,7,12,17,22 ...) පියවරක් උදා: 2/5 2 ට ආරම්භ වන මාධ්යයක් හඳුන්වා දීමට නම් භාවිතා කළ හැක. ඔවුන් අවසානය පසුකරන්නේ නැත.
  • ක්ෂේත්‍රයක ඇති තරු ලකුණු ( *) මඟින් එම ක්ෂේත්‍රය සඳහා වන මුළු පරාසයම නිරූපණය කරයි (උදා: 0-59මිනිත්තු ක්ෂේත්‍රය සඳහා).
  • පරාසයන් සහ පියවර ඒකාබද්ධ කළ හැකිය. උදා: */2අදාළ ක්ෂේත්‍රය සඳහා අවම වශයෙන් ආරම්භ වන අතර පසුව සෑම 2 උදා 0 මිනිත්තු සඳහා (0,2 ... 58), මාස 1 ක් (1,3 ... 11) යනාදිය.

ක්‍රෝන් විධාන නිදොස් කිරීම

තැපෑල පරීක්ෂා කරන්න!

පෙරනිමියෙන් ක්‍රෝන් විසින් විධානය ක්‍රියාත්මක කරන පරිශීලකයාට ඕනෑම ප්‍රතිදානයක් තැපැල් කරනු ඇත. ප්‍රතිදානයක් නොමැති නම් තැපෑලක් නොමැත. ඔබට වෙනත් ගිණුමකට තැපැල් යැවීමට ක්‍රොන් අවශ්‍ය නම්, ඔබට ක්‍රොන්ටාබ් ගොනුවේ MAILTO පරිසර විචල්‍යය සැකසිය හැකිය.

MAILTO=user@somehost.tld
1 2 * * * /path/to/your/command

ප්‍රතිදානය ඔබම අල්ලා ගන්න

ඔබට stdout සහ stderr ගොනුවකට හරවා යැවිය හැකිය. ප්‍රතිදානය ග්‍රහණය කර ගැනීම සඳහා නිශ්චිත වාක්‍ය ඛණ්ඩය ෂෙල් ක්‍රෝන් භාවිතා කරන දේ අනුව වෙනස් විය හැකිය. ගොනුවකට සියලු ප්‍රතිදානයන් සුරකින උදාහරණ දෙකක් මෙන්න /tmp/mycommand.log:

1 2 * * * /path/to/your/command &>/tmp/mycommand.log
1 2 * * * /path/to/your/command >/tmp/mycommand.log 2>&1

ල .ු-සටහන් දෙස බලන්න

ක්‍රොන් එහි ක්‍රියා සිස්ලොග් හරහා ලොග් කරයි, එය (ඔබගේ සැකසුම අනුව) බොහෝ විට /var/log/cronහෝ /var/log/syslog.

අවශ්‍ය නම් ඔබට ක්‍රෝන් ප්‍රකාශ උදා

grep CRON /var/log/syslog 

දැන් අපි ක්‍රොන්හි මූලික කරුණු ඉක්මවා ගොස් ඇති අතර, ලිපිගොනු තිබෙන්නේ කොතැනද සහ ඒවා භාවිතා කරන්නේ කෙසේද යන්න පොදු ගැටළු කිහිපයක් දෙස බලමු.

ක්‍රෝන් ක්‍රියාත්මක වන බව පරීක්ෂා කරන්න

ක්‍රෝන් ක්‍රියාත්මක නොවන්නේ නම් ඔබේ විධාන උපලේඛනගත නොවනු ඇත ...

ps -ef | grep cron | grep -v grep

ඔබට එවැනි දෙයක් ලබා ගත යුතුයි

root    1224   1  0 Nov16 ?    00:00:03 cron

හෝ

root    2018   1  0 Nov14 ?    00:00:06 crond

එය නැවත ආරම්භ නොකරන්නේ නම්

/sbin/service cron start

හෝ

/sbin/service crond start

වෙනත් ක්‍රම තිබිය හැකිය; ඔබේ ඩිස්ට්‍රෝ සපයන දේ භාවිතා කරන්න.

cron ඔබගේ විධානය සීමිත පරිසරයක ක්‍රියාත්මක කරයි.

ලබා ගත හැකි පරිසර විචල්‍යයන් ඉතා සීමිත විය හැකිය. සාමාන්යයෙන්, ඔබ පමණක් වැනි අර්ථ දක්වා විචල්ය කිහිපයක්, කරන්නම් $LOGNAME, $HOMEහා $PATH.

විශේෂයෙන් සඳහන් කළ යුත්තේ PATHඑය සීමා කර /bin:/usr/binතිබීමයි. "මගේ ක්‍රෝන් ස්ක්‍රිප්ට් ක්‍රියා නොකරයි" ගැටළු වලින් බහුතරයක් මෙම සීමිත මාවත නිසා ඇතිවේ . ඔබේ විධානය වෙනත් ස්ථානයක තිබේ නම් ඔබට මෙය ක්‍රම කිහිපයකින් විසඳා ගත හැකිය:

  1. ඔබේ විධානයට සම්පූර්ණ මාර්ගය සපයන්න.

    1 2 * * * /path/to/your/command
    
  2. Crontab ගොනුවේ සුදුසු PATH එකක් සපයන්න

    PATH=/bin:/usr/bin:/path/to/something/else
    1 2 * * * command 
    

ඔබේ විධානයට වෙනත් පරිසර විචල්‍යයන් අවශ්‍ය නම් ඔබට ඒවා crontab ගොනුවේද අර්ථ දැක්විය හැකිය.

cron ඔබේ විධානය cwd == $ HOME සමඟ ක්‍රියාත්මක කරයි

ඔබ ක්‍රියාත්මක කරන වැඩසටහන ගොනු පද්ධතියේ කොතැනක සිටියත්, ක්‍රෝන් ක්‍රියාත්මක වන විට වැඩසටහනේ වර්තමාන වැඩ කරන නාමාවලිය එය පරිශීලකයාගේ නිවාස නාමාවලිය වේ. ඔබ ඔබේ වැඩසටහනේ ලිපිගොනු වෙත ප්‍රවේශ වන්නේ නම්, ඔබ සාපේක්ෂ මාර්ග භාවිතා කරන්නේ නම් මෙය සැලකිල්ලට ගත යුතුය, නැතහොත් (වඩාත් සුදුසු) සෑම තැනකම පූර්ණ සුදුසුකම් සහිත මාර්ග භාවිතා කරන්න, සහ සියලු දෙනාටම ව්‍යාකූලත්වයක් ඉතිරි වේ.

මගේ crontab හි අවසාන විධානය ක්‍රියාත්මක නොවේ

ක්‍රොන්ට සාමාන්‍යයෙන් අවශ්‍ය වන්නේ විධාන නව රේඛාවකින් අවසන් කිරීමයි. ඔබේ crontab සංස්කරණය කරන්න; අවසාන විධානය අඩංගු පේළියේ කෙළවරට ගොස් නව පේළියක් ඇතුළු කරන්න (enter ඔබන්න).

Crontab ආකෘතිය පරීක්ෂා කරන්න

ඔබට / etc / crontab සඳහා පරිශීලක crontab ආකෘතිගත crontab හෝ /etc/cron.d හි කොටස් භාවිතා කළ නොහැක. පරිශීලක හැඩතල ගැන්වූ ක්‍රොන්ටාබ් පේළියක 6 වන ස්ථානයේ පරිශීලක නාමයක් ඇතුළත් නොකරන අතර පද්ධති හැඩතල ගැන්වූ ක්‍රොන්ටාබ්හි පරිශීලක නාමය ඇතුළත් වන අතර එම පරිශීලකයා ලෙස විධානය ක්‍රියාත්මක කරයි.

මම ගොනුවක් /etc/cron.αhourly,daily,weekly,monthly in ට දැමූ අතර එය ක්‍රියාත්මක නොවේ

  • ගොනු නාමයට දිගුවක් නොමැතිදැයි පරීක්ෂා කරන්න ධාවන කොටස් බලන්න
  • ගොනුවට ක්‍රියාත්මක කිරීමේ අවසර ඇති බවට සහතික වන්න.
  • ඔබේ ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීමේදී භාවිතා කළ යුතු දේ පද්ධතියට කියන්න (උදා: #!/bin/shඉහළට දමන්න )

ක්‍රෝන් දිනය හා සම්බන්ධ දෝෂ

ඔබගේ දිනය මෑතකදී පරිශීලකයෙකු හෝ පද්ධති යාවත්කාලීන කිරීමක්, කාල කලාපයක් හෝ වෙනත් ආකාරයකින් වෙනස් කර ඇත්නම්, ක්‍රොන්ටාබ් වැරදි ලෙස හැසිරීමට පටන් ගෙන විකාර දෝෂ පෙන්වනු ඇත, සමහර විට වැඩ කරයි, සමහර විට එසේ නොවේ. මෙය ක්‍රොන්ටාබ්ගේ උත්සාහය වන අතර එය යටින් කාලය වෙනස් වන විට "ඔබට අවශ්‍ය දේ කිරීමට" උත්සාහ කරයි. පැය වෙනස් කිරීමෙන් පසු "මිනිත්තුව" ක්ෂේත්‍රය අකාර්යක්ෂම වනු ඇත. මෙම තත්වය තුළ, පිළිගනු ලබන්නේ තරු ලකුණු පමණි. ක්‍රෝන් නැවත අරඹා අන්තර්ජාලයට සම්බන්ධ නොවී නැවත උත්සාහ කරන්න (එබැවින් දිනයට එක් කාල සේවාදායකයකට නැවත සැකසීමට අවස්ථාවක් නොමැත).

ප්‍රතිශත සං signs ා, නැවතත්

ප්‍රතිශත සං signs ා පිළිබඳ උපදෙස් අවධාරණය කිරීම සඳහා, ක්‍රෝන් ඔවුන් සමඟ කරන දේ පිළිබඳ උදාහරණයක් මෙන්න:

# cron entry
* * * * * cat >$HOME/cron.out%foo%bar%baz

පේළි 3 අඩංගු ~ / cron.out ගොනුව සාදනු ඇත

foo
bar
baz

dateවිධානය භාවිතා කරන විට මෙය විශේෂයෙන් ආක්‍රමණශීලී වේ. ප්‍රතිශත සලකුණු වලින් ගැලවීමට වග බලා ගන්න

* * * * * /path/to/command --day "$(date "+\%Y\%m\%d")"

හවුල් පුස්තකාල සොයා ගැනීමට නොහැකි වීම හේතුවෙන් ඔබේ ක්‍රෝන් කර්තව්‍යය අසාර්ථක වුවහොත් LD_LIBRARY_PATH ට අමතර නාමාවලි සැකසීමට අවශ්‍ය විය හැකි බව 'සීමිත env' කොටසේ සඳහන් කිරීමට අවශ්‍ය විය හැකිය.
ඩේවිඩ් ජේ

ඔබට මේ වගේ දෙයක් පවා ලිවිය හැකි බව සලකන්න: 35 1,5-23 / 2 * * * do_something වෙනුවට 35,1,5,7,9, .. * * * මීට අමතරව මෙම crontab.guru විසින් ඔබ විසින් කරන ලද ප්‍රවේශයන් පරිවර්තනය කරයි මිනිස් භාෂාව.
ඩෙනිස් නොල්ටේ

1
ප්‍රතිදාන ග්‍රහණය මට වැඩ කරන්නේ නැත, ෂෙල් කවචය නිසා විය හැකිය. මම හිතන්නේ මෙය වඩා අතේ ගෙන යා හැකි ය: ... /path/to/your/command >/tmp/mycommand.log 2>&1
chus

මෙය මට වැඩ කළේය:sudo apt-get install postfix
jmunsch

ක්‍රෝන් කාර්යය ද ගොනුව කෙතරම් බරද යන්න මත රඳා පවතීද? මම ක්‍රෝන් සමඟ පයිතන්හි සරල හෙලෝ ලෝකයක් ධාවනය කළ නිසා එය ක්‍රියාත්මක විය. නමුත් මගේ දෙවන කේතය ටිකක් බර වූ අතර සාමාන්‍යයෙන් ධාවනය වන නමුත් ක්‍රෝන් සමඟ එය ගොනුවට කිසිදු ප්‍රතිදානයක් ලබා නොදේ.
දේවේන්ද්‍ර භට්

25

ඩේබියන් ලිනක්ස් සහ එහි ව්‍යුත්පන්නය (උබුන්ටු, මින්ට්, ආදිය) ඔබේ ක්‍රෝන් කාර්යයන් ක්‍රියාත්මක කිරීම වලක්වන සමහර සුවිශේෂතා ඇත; විශේෂයෙන්ම, මෙම ගොනු /etc/cron.d, /etc/cron.{hourly,daily,weekly,monthly}යුතුය:

  • root සතු විය යුතුය
  • මූලයෙන් පමණක් ලිවිය හැකිය
  • කණ්ඩායම් හෝ වෙනත් පරිශීලකයින් විසින් ලිවිය නොහැක
  • තිත් නොමැතිව නමක් ඇත '.' හෝ වෙනත් විශේෂ චරිතයක් නමුත් '-' සහ '_'.

අන්තිමයා නිතිපතා සැක සහිත පරිශීලකයින්ට රිදවයි; විශේෂයෙන් නම් මෙම ෆෝල්ඩර එකක් ඕනෑම තිර රචනය whatever.sh, mycron.py, testfile.plආදිය සඳහා, නෑ කවදාවත්, ක්රියාත්මක කළ යුතුය.

මගේ අත්දැකීම් අනුව, මෙම විශේෂිත කරුණ ඩෙබියන් සහ ව්‍යුත්පන්නයන් මත ක්‍රියාත්මක නොවන ක්‍රොන්ජොබ් සඳහා බොහෝ විට හේතුවකි.

man cronඅවශ්‍ය නම් වැඩි විස්තර සඳහා බලන්න .


20

ඔබගේ ක්‍රොන්ජොබ්ස් වැඩ කිරීම නවත්වන්නේ නම්, ඔබගේ මුරපදය කල් ඉකුත්වී ඇත්දැයි පරීක්ෂා කරන්න. පරිශීලකයා සත්‍යාපනය කිරීමේ ගැටළු පෙන්වන පහත
පණිවිඩයට /var/log/messagesසමාන පණිවිඩ ඇත :

(username) FAILED to authorize user with PAM (Authentication token is no longer valid; new one required)


2
මෙයද ලැබුණි (දෝෂ පණිවිඩ ගොනුව / var / log / syslog මට). මගේ නඩුවේදී ඩිජිටල් ඕෂන් පෙට්ටියක්, නිර්මාණය කරන වේලාවේදී, ඔවුන් මුරපදය (විකල්පයක් ලෙස) වෙනත් එකකට යලි සකසනු ඇති අතර, පෙනෙන විදිහට ඔබ එහි ගොස් එය වෙනස් කරන තුරු, සියලු ක්‍රෝන් රැකියා ක්‍රියාත්මක නොවේ. බමර්. නිවැරදි කිරීම වැනි දෙයක්sudo -u root passwd
rogerdpack

14

අසාමාන්‍ය හා අක්‍රමවත් කාලසටහන්

ක්‍රෝන් යනු සෑම දෙයක්ම ඉතා මූලික උපලේඛකයෙකු ලෙස සැලකෙන අතර සින්ටැක්ස් මඟින් පරිපාලකයාට තරමක් අසාමාන්‍ය උපලේඛන සැකසීමට පහසුවෙන් ඉඩ නොදේ.

commandසෑම මිනිත්තු 5 කට වරක් ධාවනය කිරීම සඳහා පොදුවේ පැහැදිලි කෙරෙන පහත සඳහන් කාර්යය සලකා බලන්න :

*/5 * * * * /path/to/your/command

එදිරිව:

*/7 * * * * /path/to/your/command

වන නොවේ සෑම විටම ක්රියාත්මක commandසෑම විනාඩි 7 .

/පියවරක් හඳුන්වා දීමට චරිතය භාවිතා කළ හැකි බව මතක තබා ගන්න, නමුත් පියවර මාලාවක අවසානයෙන් ඔබ්බට නොයනු ඇත. උදා: */7සෑම 7 වන මිනිත්තුවකටම මිනිත්තු සිට මිනිත්තු 0-590,7,14,21,28,35,42,49, 56 එහෙත්, එක පැයක් අතර, ඊළඟ අතර වනු ඇත කාණ්ඩ අතර 4 ක් පමණක් විනාඩි පසු, 00:56නව මාලාවක් ට ආරම්භ 01:00, 01:07ආදිය (සහ කාණ්ඩ මත ක්රියාත්මක කල නොහැකි වනු ඇත 01:03, 01:10, 01:17ආදිය).


ඒ වෙනුවට කුමක් කළ යුතුද?

බහු කණ්ඩායම් සාදන්න

තනි ක්‍රෝන් රැකියාවක් වෙනුවට, අපේක්ෂිත කාලසටහනේ ප්‍රති result ල ඒකාබද්ධ කරන බහුවිධ කණ්ඩායම් සාදන්න.

උදාහරණයක් ලෙස සෑම මිනිත්තු 40 කට වරක් කණ්ඩායමක් ධාවනය කිරීම සඳහා (00:00, 00:40, 01:20, 02:00 යනාදිය) කණ්ඩායම් දෙකක් සාදන්න, එකක් පැය දෙකකට දෙවරක් ධාවනය වන අතර දෙවැන්න අමුතු පැය පමණක් ධාවනය කරයි:

# The following lines create a batch that runs every 40 minutes i.e.

# runs on   0:00, 0:40,        02:00, 02:40         04:00 etc to 22:40
0,40 */2 * * * /path/to/your/command

# runs on               01:20,               03:20,       etc to 23:20
20 1/2 * * * /path/to/your/command

# Combined: 0:00, 0:40, 01:20, 02:00, 02:40, 03:20, 04:00 etc.

ඔබේ කණ්ඩායම් අඩු වාර ගණනක් ධාවනය කරන්න

බහුවිධ කණ්ඩායම් වශයෙන් බිඳ දැමීම දුෂ්කර කාලසටහනක් වන සෑම මිනිත්තු 7 කට වරක් ඔබේ කණ්ඩායම ධාවනය කරනවා වෙනුවට, සෑම විනාඩි 10 කට වරක් එය ධාවනය කරන්න.

ඔබේ කණ්ඩායම් නිතර නිතර ආරම්භ කරන්න (නමුත් එකවර කණ්ඩායම් කිහිපයක් ධාවනය වීම වළක්වන්න)

බොහෝ අමුතු උපලේඛන විකාශනය වන්නේ කණ්ඩායමේ ධාවන වේලාවන් වැඩි වීම / උච්චාවචනය වීම සහ පසුව එකම කණ්ඩායමේ පසුකාලීන ලකුණු එකිනෙක අතිච්ඡාදනය වීම හා එකවර ධාවනය වීම වැළැක්වීම සඳහා කණ්ඩායම් අමතර ආරක්ෂිත ආන්තිකයකින් උපලේඛනගත වීමයි.

ඒ වෙනුවට, වෙනස් ආකාරයකින් සිතන්න සහ පෙර ධාවනයක් තවම අවසන් වී නැති නමුත් වෙනත් ආකාරයකින් ධාවනය වන ක්‍රොන්ජොබ් එකක් නිර්මාණය කරන්න. මෙම ප්රශ්න හා පිළිතුරු බලන්න :

* * * * * /usr/bin/flock -n /tmp/fcj.lockfile /usr/local/bin/frequent_cron_job 

පෙර / usr / local / bin / නිතර_cron_job හි ධාවනය අවසන් වූ වහාම එය නව ධාවනය ආරම්භ වනු ඇත.

ඔබේ කණ්ඩායම් නිතර නිතර ආරම්භ කරන්න (නමුත් කොන්දේසි නිවැරදි නොවන විට කරුණාවෙන් පිටවන්න)

ක්‍රෝන් සින්ටැක්ස් සීමිත බැවින් කණ්ඩායම් කාර්යය තුළම වඩාත් සංකීර්ණ කොන්දේසි සහ තර්කනයන් තැබීමට ඔබට තීරණය කළ හැකිය (හෝ පවතින කණ්ඩායම් රැකියාව වටා එතීමේ පිටපතක). එමඟින් ඔබේ ප්‍රියතම ස්ක්‍රිප්ටින් භාෂාවල උසස් හැකියාවන් භාවිතා කිරීමටත්, ඔබේ කේතය අදහස් දැක්වීමටත්, ක්‍රොන්ටාබ් ප්‍රවේශයේම කියවීමට අපහසු ඉදිකිරීම් වලක්වනු ඇත.

බැෂ් එකෙන් seven-minute-jobපසුව පෙනෙන්නේ මෙවැනි දෙයක් වැනි ය:

#!/bin/bash
# seven-minute-job
# This batch will only run when 420 seconds (7 min) have passed
# since the file /tmp/lastrun was either created or updated

if [ ! -f /tmp/lastrun ] ; then
    touch /tmp/lastrun
fi

if [ $(( $(date +%s) - $(date -r /tmp/lastrun +%s) )) -lt 420 ] ; then
     # The minimum interval of 7 minutes between successive batches hasn't passed yet.
    exit 0
fi

####  Start running your actual batch job below

/path/to/your/command

#### actual batch job is done, now update the time stamp
date > /tmp/lastrun
#EOF

එවිට ඔබට සෑම මිනිත්තුවක්ම ආරක්ෂිතව ධාවනය කිරීමට උත්සාහ කළ හැකිය:

* * * * * /path/to/your/seven-minute-job

ඒ වෙනස්, එහෙත් සමාන ප්රශ්නයක් සෑම මසකම පළමු සඳුදා (හෝ දෙවන බදාදා) ආදිය මත ක්රියාත්මක කිරීමට දිනය වත් 1 අතර වන විට සරලව සෑම සඳුදා ක්රියාත්මක කිරීමට කාණ්ඩය හා පිටවීමේ කාලසටහන කණ්ඩායම සැලසුම් කිරීමට බව වන හෝ 7 වැනි සහ සතියේ දිනය සඳුදා නොවේ.

#!/bin/bash
# first-monday-of-the-month-housekeeping-job

# exit if today is not a Monday (and prevent locale issues by using the day number) 
if [ $(date +%u) != 1 ] ; then
  exit 0
fi

# exit if today is not the first Monday
if [ $(date +%d) -gt 7 ] ; then
  exit 0
fi

####  Start running your actual batch job below

/path/to/your/command

#EOF

සෑම සඳුදා දිනකම ඔබට ආරක්ෂිතව ධාවනය කිරීමට (උත්සාහ කිරීමට) හැකි:

0 0 * * 1 /path/to/your/first-monday-of-the-month-housekeeping-job

ක්‍රෝන් භාවිතා නොකරන්න

ඔබේ අවශ්‍යතා සංකීර්ණ නම්, සංකීර්ණ කාලසටහන් (බහු සේවාදායකයන් හරහා බෙදා හරිනු ලැබේ) සහ ප්‍රේරක, රැකියා පරායත්තතා, දෝෂ හැසිරවීම, නැවත උත්සාහ කිරීම සහ නැවත උත්සාහ කිරීම අධීක්‍ෂණය කිරීම සඳහා නිර්මාණය කර ඇති වඩා දියුණු නිෂ්පාදනයක් භාවිතා කිරීම ගැන සලකා බැලිය හැකිය. " රැකියා උපලේඛනගත කිරීම සහ / හෝ" කාර්ය භාර ස්වයංක්‍රීයකරණය ".


8

PHP විශේෂිත

ඔබට ක්‍රෝන් රැකියාවක් තිබේ නම්:

php /bla/bla/something.php >> /var/logs/somelog-for-stdout.log

දෝෂ ඇති වුවහොත් ඒවා ඔබ වෙත යවනු ඇතැයි අපේක්ෂා කළත් ඒවා එසේ නොවේ - මෙය පරීක්ෂා කරන්න.

පෙරනිමියෙන් PHP STDOUT වෙත දෝෂ නොයවයි. @ බලන්න https://bugs.php.net/bug.php?id=22839

මෙය නිවැරදි කිරීම සඳහා, cli’s php.ini හෝ ඔබේ පේළියේ (හෝ PHP සඳහා ඔබේ බෑෂ් එතීමෙන්) එකතු කරන්න:

  • - display_startup_errors = 1 යන්න අර්ථ දක්වන්න
  • --define display_errors = 'stderr'

1 වන සැකසුම මඟින් ඔබට 'මතක ops' සහ 2 වැනි මාරක මාර්‍ග ඇතිවීමට ඉඩ සලසයි. ඔබට හොඳින් නිදා ගත හැකි වූ පසු පමණක් සියල්ල ලොග් වීම වෙනුවට ඔබේ මූල තැපෑලට යවනු ලැබේ.


2
එම දෝෂ වාර්තාව 2007 දී වසා දමන ලද්දේ පැච් වල තත්වය PHP 5.2+ ශාඛාවලට එක් කිරීමෙනි. මෙය අවශ්‍ය බව ඔබට විශ්වාසද? මම දැන් PHP 5.4 මත උත්සාහ කළ අතර එය හොඳින් ක්‍රියාත්මක වන බව පෙනේ. (එය තවමත් PHP 4 සඳහා අවශ්‍ය වේ).
Xeoncross

@ Xeoncross පිළිතුරු දිනය බලන්න :)
gaRex

1
ඔව්, ඔබ 2013 දී පිළිතුරු දුන් නිසාත්, ටිකට් පත '07 දී ආපසු ලැබුණු නිසාත් මා ව්‍යාකූල වූයේ එයයි.
Xeoncross

0

සම්පූර්ණත්වය සඳහා මගේ පිළිතුර මෙතැනින් එකතු කිරීම සහ තවත් ප්‍රයෝජනවත් විය හැකි සම්පතක් එක් කිරීම:

මෙම cronපරිශීලක වෙනස් කර $PATHඔබට වඩා:

පරිශීලකයින් නිතරම crontabඇතුළත් කිරීම් සමඟ ඇති කර ගන්නා ගැටළුවක් නම්, ලොග් වී ඇති පරිශීලකයෙකු ලෙසට වඩා cronවෙනස් ආකාරයකින් ධාවනය වන බව ඔවුන්ට අමතක environmentවීමයි. උදාහරණයක් ලෙස, පරිශීලකයෙකු සිය $HOMEනාමාවලියෙහි වැඩසටහනක් හෝ ස්ක්‍රිප්ටයක් නිර්මාණය කර එය ක්‍රියාත්මක කිරීම සඳහා පහත විධානයට ඇතුල් වේ:

$ ./certbot ... 

විධානය ඔහුගේ විධාන රේඛාවෙන් පරිපූර්ණව ක්‍රියාත්මක වේ. එවිට පරිශීලකයා එම විධානය ඔහුගේ වෙත එක් කරයි crontab, නමුත් මෙය ක්‍රියාත්මක නොවන බව සොයා ගනී:

*/10 * * * * ./certbot ....

මෙම නඩුවේ අසාර්ථක වීමට හේතුව එය පුරනය වී ./ඇති cronපරිශීලකයාට වඩා වෙනස් ස්ථානයකි . එනම්, environmentවෙනස් ය! PATH යනු කොටසකි environment, එය සාමාන්‍යයෙන් cronපරිශීලකයාට වෙනස් වේ . මෙම ගැටළුව සංකීර්ණ environmentකිරීම cronනම්, සියලු * නික්ස් බෙදාහැරීම් සඳහා for එක සමාන නොවන අතර , එහි බහු සංස්කරණ ඇතcron

මෙම විශේෂිත ගැටළුවට සරල විසඳුමක් නම් cronපරිශීලකයාට crontabප්‍රවේශයේ සම්පූර්ණ මාර්ග පිරිවිතරයක් ලබා දීමයි :

0 22 * * * /path/to/certbot .....

යනු කුමක්ද cronපරිශීලක environment?

සමහර අවස්ථා වලදී, අපගේ පද්ධතියේ සම්පූර්ණ environmentපිරිවිතර දැන ගැනීමට අපට අවශ්‍ය විය හැකිය cron(නැතහොත් අප කුතුහලයෙන් සිටිය හැකිය). පරිශීලකයා සඳහා වන දේ කුමක්ද , එය අපට වඩා වෙනස් වන්නේ කෙසේද? environmentcronතව දුරටත්, අපි environmentවෙනත් cronපරිශීලකයෙකු සඳහා දැන ගැනීමට අවශ්‍ය විය හැකිය - rootඋදාහරණයක් ලෙස ... rootපරිශීලකයා environmentභාවිතා කරන්නේ cronකුමක්ද? මෙය ඉගෙන ගත හැකි එක් ක්‍රමයක් නම් cronඅපට පැවසීමට ඉල්ලීමයි:

  1. ඔබගේ නිවාස නාමාවලියෙහි ( ~/) පහත පරිදි (හෝ ඔබ කැමති සංස්කාරකය සමඟ) ෂෙල් ස්ක්‍රිප්ට් එකක් සාදන්න :
$ nano ~/envtst.sh
  1. ඔබේ පද්ධතිය / පරිශීලකයා සඳහා සැකසීමෙන් පසුව, සංස්කාරකයේ පහත සඳහන් දෑ ඇතුළත් කරන්න:
#!/bin/sh 
/bin/echo "env report follows for user "$USER >> /home/you/envtst.sh.out 
/usr/bin/env >> /home/you/envtst.sh.out 
/bin/echo "env report for user "$USER" concluded" >> /home/you/envtst.sh.out
/bin/echo " " >> /home/you/envtst.sh.out
  1. ගොනුව සුරකින්න, සංස්කාරකයෙන් ඉවත් වී ගොනු අවසරයන් ක්‍රියාත්මක කළ හැකි ලෙස සකසන්න.
$ chmod a+rx ~/envtst.sh
  1. ඔබ දැන් නිර්මාණය කළ ස්ක්‍රිප්ට් එක ධාවනය කර ප්‍රතිදානය සමාලෝචනය කරන්න /home/you/envtst.sh.out. $USERඔබ ඇතුල් වී ඇති ආකාරයට මෙම ප්‍රතිදානය ඔබගේ වත්මන් පරිසරය පෙන්වනු ඇත:
$ ./envtst.sh $$ cat /home/you/envtst.sh.out
  1. crontabසංස්කරණය සඳහා ඔබේ විවෘත කරන්න :
$ crontab -e -u root
  1. ඔබගේ පතුලේ පහත පේළිය ඇතුළත් කරන්න crontab:
* * * * *  /home/you/envtst.sh >> /home/you/envtst.sh.err 2>&1

පිළිතුර: ප්‍රතිදාන ගොනුවේ “root cron පරිශීලකයා” සඳහා /home/you/envtst.sh.outලැයිස්තුවක් අඩංගු වේ environment. ඔබ එය දැනගත් පසු, ඒ අනුව ඔබේ crontabප්‍රවේශය සකස් කරන්න .

මගේ සටහනේ මට අවශ්‍ය කාලසටහන සඳහන් කළ නොහැක crontab:

සඳහා කාලසටහන ඇතුළත් crontabකිරීම ඇත්ත වශයෙන්ම අර්ථ දක්වා ඇති man crontabඅතර ඔබ මෙය කියවිය යුතුය. කෙසේ වෙතත්, කියවීම man crontabසහ කාලසටහන තේරුම් ගැනීම වෙනස් කරුණු දෙකකි. කාලසටහන පිරිවිතරයක් මත අත්හදා බැලීම් සහ දෝෂයන් ඉතා වෙහෙසකාරී විය හැකිය. වාසනාවකට මෙන්, උදව් කළ හැකි සම්පතක් තිබේ: ක්‍රොන්ටාබ් ගුරු. . ඔබගේ කාලසටහන පිරිවිතර ඇතුළත් කරන්න, එය කාලසටහන සරල ඉංග්‍රීසි භාෂාවෙන් පැහැදිලි කරයි.

අවසාන වශයෙන්, මෙහි ඇති අනෙක් පිළිතුරු වලින් අතිරික්ත වීමේ අවදානමක් ඇති විට, crontabඔබට උපලේඛනගත කිරීමට එක් රැකියාවක් ඇති බැවින් ඔබ එක් ප්‍රවේශයකට පමණක් සීමා වී ඇතැයි සිතීමට කොටු නොවන්න . crontabඔබට අවශ්‍ය කාලසටහන ලබා ගැනීමට අවශ්‍ය තරම් ප්‍රවේශයන් භාවිතා කිරීමට ඔබට නිදහස තිබේ .

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.