ඔබගේ සියලු ක්රොන්ටාබ් ආශ්රිත දුක් කරදර / ගැටලු (ලිනක්ස්) විසඳන්නේ කෙසේද?
මෙය ප්රජා විකියකි , මෙම පිළිතුරෙහි කිසියම් වැරැද්දක් ඔබ දුටුවහොත් හෝ අමතර තොරතුරු තිබේ නම් කරුණාකර එය සංස්කරණය කරන්න.
පළමුව, මූලික පාරිභාෂිතය:
- 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 2 * * * /path/to/your/command
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")"