Cron ืื™ืŸ ืœื™ื ื•ืงืก: ื’ืขืฉื™ื›ื˜ืข, ื ื•ืฆืŸ ืื•ืŸ ืžื™ื˜ืœ

Cron ืื™ืŸ ืœื™ื ื•ืงืก: ื’ืขืฉื™ื›ื˜ืข, ื ื•ืฆืŸ ืื•ืŸ ืžื™ื˜ืœ

ื“ืขืจ ืงืœืึทืกื™ืฉ ื”ืื˜ ื’ืขืฉืจื™ื‘ืŸ ืึทื– ื’ืœื™ืงืœืขืš ืฉืขื” ื˜ืึธืŸ ื ื™ื˜ ื•ื•ืึทืš. ืื™ืŸ ื™ืขื ืข ื•ื•ื™ืœื“ืข ืฆื™ื™ื˜ืŸ ื–ืขื ืขืŸ ื ื™ืฉื˜ ื’ืขื•ื•ืขืŸ ืคึผืจืึธื•ื’ืจืึทืžืขืจื– ืื•ืŸ ื ื™ื˜ ื™ื•ื ื™ืงืก, ืึธื‘ืขืจ ื”ื™ื™ึทื ื˜ ืคึผืจืึธื•ื’ืจืึทืžืขืจื– ื•ื•ื™ืกืŸ ื–ื™ื›ืขืจ: Cron ื•ื•ืขื˜ ื”ืึทืœื˜ืŸ ืฉืคึผื•ืจ ืคื•ืŸ ืฆื™ื™ื˜ ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ื–ื™ื™.

ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื” ื™ื•ื˜ื™ืœืึทื˜ื™ื– ื–ืขื ืขืŸ ื‘ื™ื™ื“ืข ืึท ืฉื•ื•ืึทื›ืงื™ื™ึทื˜ ืื•ืŸ ืึท ืึทืจื‘ืขื˜ ืคึฟืึทืจ ืžื™ืจ. sed, awk, wc, cut ืื•ืŸ ืื ื“ืขืจืข ืึทืœื˜ ืžื’ื™ืœื” ื–ืขื ืขืŸ ืœื•ื™ืคืŸ ื“ื•ืจืš ืกืงืจื™ืคึผืก ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ืกืขืจื•ื•ืขืจืก ื™ืขื“ืขืจ ื˜ืึธื’. ืคื™ืœืข ืคื•ืŸ โ€‹โ€‹ื–ื™ื™ ื–ืขื ืขืŸ ื“ื™ื–ื™ื™ื ื“ ื•ื•ื™ ื˜ืึทืกืงืก ืคึฟืึทืจ Cron, ืึท ืกืงืขื“ื–ืฉื•ืœืขืจ ืขืจื™ื“ื–ืฉื ืึทืœื™ ืคึฟื•ืŸ ื“ื™ 70 ืก.

ืื™ืš ื”ืื‘ ื ืœืื ื’ืข ืฆื™ื™ื˜ ื’ืขื ื•ืฆื˜ ืงืจื•ืŸ ืื•ื™ื‘ื ืื•ื™ืคื™ืงืขืจ, ืืŸ ืืจื™ื™ื ื’ื™ื™ืŸ ืื™ืŸ ืคึผืจื˜ื™ื, ืื‘ืขืจ ืื™ื™ืŸ ื˜ืื’ ื•ื•ืขืŸ ืื™ืš ื”ืื‘ ื’ืขื˜ืจืืคืขืŸ ื ื˜ืขื•ืช ื•ื•ืขืŸ ืื™ืš ืœื•ื™ืคืŸ ื ืฉืจื™ืคื˜, ื”ืื‘ ืื™ืš ื‘ืืฉืœืืกืŸ ืขืก ื“ื•ืจื›ืฆื•ืงื•ืงืŸ. ื“ืึธืก ืื™ื– ื•ื•ื™ ื“ืขืจ ืึทืจื˜ื™ืงืœ ืื™ื– ืืจื•ื™ืก, ื•ื•ืขืŸ ืื™ืš ืฉืจื™ื™ื‘ืŸ ืขืก, ืื™ืš ื’ืขื•ื•ืืจืŸ ื‘ืึทืงืึทื ื˜ ืžื™ื˜ POSIX crontab, ื“ื™ ื”ื•ื™ืคึผื˜ ืงืจืึธืŸ ืึธืคึผืฆื™ืขืก ืื™ืŸ ืคืึธืœืงืก ืœื™ื ื•ืงืก ื“ื™ืกื˜ืจื™ื‘ื™ื•ืฉืึทื ื– ืื•ืŸ ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ืคื•ืŸ ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื–ื™ื™.

ื ื™ืฆืŸ ืœื™ื ื•ืงืก ืื•ืŸ ืœื•ื™ืคืŸ Cron ื˜ืึทืกืงืก? ื–ืขื ื˜ ืื™ืจ ืื™ื ื˜ืขืจืขืกื™ืจื˜ ืื™ืŸ ืกื™ืกื˜ืขื ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจ ืื™ืŸ ื™ื•ื ื™ืงืก? ื“ืขืžืึธืœื˜ ืžื™ืจ ื–ืขื ืขืŸ ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื•ื•ืขื’!

ืฆื•ืคืจื™ื“ืŸ

ืึธืจื™ื’ื™ืŸ ืคื•ืŸ ืžื™ื ื™ื

ืคึผืขืจื™ืึธื“ื™ืฉ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืคื•ืŸ ื‘ืึทื ื™ืฆืขืจ ืึธื“ืขืจ ืกื™ืกื˜ืขื ืžื’ื™ืœื” ืื™ื– ืึท ืงืœืึธืจ ื•ื•ื™ ื“ืขืจ ื˜ืึธื’ ื ื™ื™ื˜ื™ืงื™ื™ึทื˜ ืื™ืŸ ืึทืœืข ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขืžืขืŸ. ื“ืขืจื™ื‘ืขืจ, ืคึผืจืึธื•ื’ืจืึทืžืขืจื– ืื™ื™ื ื’ืขื–ืขืŸ ื“ื™ ื ื•ื™ื˜ ืคึฟืึทืจ ื‘ืึทื“ื™ื ื•ื ื’ืก ื•ื•ืึธืก ืœืึธื–ืŸ ื–ื™ื™ ืฆื• ืฆืขื ื˜ืจืืœ ืคึผืœืึทื ื™ืจืŸ ืื•ืŸ ื•ื™ืกืคื™ืจืŸ ื˜ืึทืกืงืก ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜ ืฆื•ืจื™ืง.

ื™ื•ื ื™ืงืก-ื•ื•ื™ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขืžืขืŸ ืฉืคึผื•ืจ ื–ื™ื™ืขืจ ืึธืจื™ื’ื™ื ืก ืฆื•ืจื™ืง ืฆื• ื•ื•ืขืจืกื™ืข 7 ื™ื•ื ื™ืงืก, ื“ืขื•ื•ืขืœืึธืคึผืขื“ ืื™ืŸ ื“ื™ 70 ืก ืคื•ืŸ ื“ื™ ืœืขืฆื˜ืข ื™ืึธืจื”ื•ื ื“ืขืจื˜ ืื™ืŸ ื‘ืขืœ ืœืึทื‘ืก, ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ื“ื•ืจืš ื“ื™ ื‘ืึทืจื™ืžื˜ Ken Thompson. ื•ื•ืขืจืกื™ืข 7 ื™ื•ื ื™ืงืก ืื•ื™ืš ื™ื ืงืœื•ื“ืขื“ Cron, ืึท ื“ื™ื ืกื˜ ืคึฟืึทืจ ืงืขืกื™ื™ื“ืขืจื“ื™ืง ืคืœื™ืกื ื“ื™ืง ืกื•ืคึผืขืจื•ืกืขืจ ื˜ืึทืกืงืก.

ื ื˜ื™ืคึผื™ืฉ ืžืึธื“ืขืจืŸ ืงืจืึธืŸ ืื™ื– ืึท ืคึผืฉื•ื˜ ืคึผืจืึธื’ืจืึทื, ืึธื‘ืขืจ ื“ื™ ืึทืคึผืขืจื™ื™ื˜ื™ื ื’ ืึทืœื’ืขืจื™ื“ืึทื ืคื•ืŸ ื“ืขืจ ืึธืจื™ื’ื™ื ืขืœ ื•ื•ืขืจืกื™ืข ืื™ื– ื’ืขื•ื•ืขืŸ ืืคื™ืœื• ืกื™ืžืคึผืœืขืจ: ื“ื™ ืกืขืจื•ื•ื™ืก ืื™ื– ืื•ื™ืคื’ืขืฉื˜ืื ืขืŸ ืึทืžืึธืœ ืึท ืžื™ื ื•ื˜, ืœื™ื™ืขื ืขืŸ ืึท ื˜ื™ืฉ ืžื™ื˜ ื˜ืึทืกืงืก ืคื•ืŸ ืึท ืื™ื™ืŸ ื˜ืขืงืข (/etc/lib/crontab) ืื•ืŸ ื’ืขื˜ืืŸ ืคึฟืึทืจ ื“ื™ ืกื•ืคึผืขืจื•ืกืขืจ ื“ื™ ื˜ืึทืกืงืก ื•ื•ืึธืก ื–ืึธืœ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืื™ืŸ ื“ืขื ืงืจืึทื ื˜ ืžืึธืžืขื ื˜.

ื“ืขืจื ืึธืš, ื™ืžืคึผืจื•ื•ื•ื“ ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื“ื™ ืคึผืฉื•ื˜ ืื•ืŸ ื ื•ืฆื™ืง ื“ื™ื ืกื˜ ื–ืขื ืขืŸ ืกืึทืคึผืœื™ื™ื“ ืžื™ื˜ ืึทืœืข ื™ื•ื ื™ืงืก-ื•ื•ื™ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขืžืขืŸ.

ื’ืขื ืขืจืึทืœื™ื–ืขื“ ื“ื™ืกืงืจื™ืคึผืฉืึทื ื– ืคื•ืŸ ื“ื™ Crontab ืคึฟืึธืจืžืึทื˜ ืื•ืŸ ื“ื™ ื™ืงืขืจื“ื™ืง ืคึผืจื™ื ืกืึทืคึผืึทืœื– ืคื•ืŸ ื“ื™ ืึธืคึผืขืจืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ื™ื•ื˜ื™ืœืึทื˜ื™ื– ื–ืขื ืขืŸ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ ื“ื™ ื”ื•ื™ืคึผื˜ ื ืึธืจืžืึทืœ ืคื•ืŸ Unix-ื•ื•ื™ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขืžืขืŸ - POSIX - ืื™ืŸ 1992, ืื•ืŸ ืึทื–ื•ื™ Cron ืคึฟื•ืŸ ืึท ื“ืข ืคืึทืงื˜ืึธ ื ืึธืจืžืึทืœ ืื™ื– ื’ืขื•ื•ืืจืŸ ืึท ื“ืข ื“ื–ืฉื•ืจืข ื ืึธืจืžืึทืœ.

ืื™ืŸ 1987, Paul Vixie, ื ืึธืš ืกืขืจื•ื•ื™ื™ื“ ื™ื•ื ื™ืงืก ื™ื•ื–ืขืจื– ื•ื•ืขื’ืŸ ื–ื™ื™ืขืจ ื•ื•ื™ืœ ืคึฟืึทืจ ืงืจืึทืŸ, ื‘ืืคืจื™ื™ื˜ ืืŸ ืื ื“ืขืจ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ื“ื™ื™ืžืึทืŸ ื•ื•ืึธืก ืงืขืจืขืงื˜ืึทื“ ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ืคืจืื‘ืœืขืžืขืŸ ืคื•ืŸ ื˜ืจืื“ื™ืฆื™ืื ืขืœืŸ ืงืจืึทืŸ ืื•ืŸ ื™ืงืกืคึผืึทื ื“ื™ื“ ื“ื™ ืกื™ื ื˜ืึทืงืก ืคื•ืŸ ื˜ื™ืฉ ื˜ืขืงืขืก.

ืื™ืŸ ื“ื™ ื“ืจื™ื˜ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹Vixie Cron ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ื˜ืจืขืคืŸ POSIX ืจืขืงื•ื•ื™ืจืขืžืขื ืฅ, ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ื“ื™ ืคึผืจืึธื’ืจืึทื ื”ืื˜ ืึท ืœื™ื‘ืขืจืึทืœ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ, ืึธื“ืขืจ ื’ืึทื ืฅ, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืงื™ื™ืŸ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืื™ืŸ ืึทืœืข, ืึทื—ื•ืฅ ืคึฟืึทืจ ื“ื™ ื•ื•ื™ืœ ืื™ืŸ ื“ื™ README: ื“ืขืจ ืžื—ื‘ืจ ื˜ื•ื˜ ื ื™ืฉื˜ ื’ืขื‘ืŸ ื’ืขืจืึทื ื˜ื™ื–, ื“ืขืจ ืžื—ื‘ืจ 'ืก ื ืึธืžืขืŸ ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ืื•ื™ืกื’ืขืžืขืงื˜, ืื•ืŸ ื“ื™ ืคึผืจืึธื’ืจืึทื ืงืขื ืขืŸ ื–ื™ื™ืŸ ืกืึธืœื“ ื‘ืœื•ื™ื– ืฆื•ื–ืึทืžืขืŸ ืžื™ื˜ ืžืงื•ืจ ืงืึธื“. ื“ื™ ืจืขืงื•ื•ื™ืจืขืžืขื ืฅ ืื™ื– ื’ืขื•ื•ืขืŸ ืงืึทืžืคึผืึทื˜ืึทื‘ืึทืœ ืžื™ื˜ ื“ื™ ืคึผืจื™ื ืกืึทืคึผืึทืœื– ืคื•ืŸ ืคืจื™ื™ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ื•ื•ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ื’ื™ื™ื ื™ื ื’ ืคึผืึธืคึผื•ืœืึทืจื™ื˜ืขื˜ ืื™ืŸ ื™ืขื ืข ื™ืึธืจืŸ, ืึทื–ื•ื™ ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ืฉืœื™ืกืœ ืœื™ื ื•ืงืก ื“ื™ืกื˜ืจื™ื‘ื™ื•ืฉืึทื ื– ื•ื•ืึธืก ื–ืขื ืขืŸ ืืจื•ื™ืก ืื™ืŸ ื“ื™ ืคืจื™ 90 ืก ื’ืขื ื•ืžืขืŸ Vixie Cron ื•ื•ื™ ื–ื™ื™ืขืจ ืกื™ืกื˜ืขื ืื™ื™ื ืขืจ ืื•ืŸ ื–ืขื ืขืŸ ื ืึธืš ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ืขืก ื”ื™ื™ึทื ื˜.

ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ, Red Hat ืื•ืŸ SUSE ืึทื ื˜ื•ื•ื™ืงืœืขืŸ ืึท ื’ืึธืคึผืœ ืคื•ืŸ Vixie cron - cronie, ืื•ืŸ Debian ืื•ืŸ Ubuntu ื ื•ืฆืŸ ื“ื™ ืึธืจื™ื’ื™ื ืขืœ ืึทื“ื™ืฉืึทืŸ ืคื•ืŸ Vixie cron ืžื™ื˜ ืคื™ืœืข ืคึผืึทื˜ืฉืึทื–.

ืœืึธืžื™ืจ ืขืจืฉื˜ืขืจ ื‘ืึทืงืขื ืขืŸ ื–ื™ืš ืžื™ื˜ ื“ื™ ื‘ืึทื ื™ืฆืขืจ ื ื•ืฆืŸ crontab ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ POSIX, ื ืึธืš ื•ื•ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืกื™ื ื˜ืึทืงืก ื™ืงืกื˜ืขื ืฉืึทื ื– ืฆื•ื’ืขืฉื˜ืขืœื˜ ืื™ืŸ Vixie cron ืื•ืŸ ื“ื™ ื ื•ืฆืŸ ืคื•ืŸ ื•ื•ืขืจื™ื™ื™ืฉืึทื ื– ืคื•ืŸ Vixie cron ืื™ืŸ ืคืึธืœืงืก ืœื™ื ื•ืงืก ื“ื™ืกื˜ืจื™ื‘ื™ื•ืฉืึทื ื–. ืื•ืŸ ืœืขืกืึธืฃ, ื“ื™ ืงืึทืจืฉ ืื•ื™ืฃ ื“ืขื ืฉื˜ื™ืงืœ ืื™ื– ื“ื™ ืึทื ืึทืœื™ืกื™ืก ืคื•ืŸ ื“ื™ ืงืจืึทืŸ ื“ื™ื™ืžืึทืŸ ืžื™ื˜ืœ.

POSIX crontab

ืื•ื™ื‘ ื“ืขืจ ืึธืจื™ื’ื™ื ืขืœ ืงืจืึทืŸ ืฉื˜ืขื ื“ื™ืง ื’ืขืืจื‘ืขื˜ ืคึฟืึทืจ ื“ื™ ืกื•ืคึผืขืจื•ืกืขืจ, ืžืึธื“ืขืจืŸ ืกืงืขื“ื–ืฉื•ืœืขืจื– ืึธืคื˜ ื”ืึทื ื“ืœืขืŸ ืžื™ื˜ ื˜ืึทืกืงืก ืคื•ืŸ ืคึผืจืึธืกื˜ ื ื™ืฆืขืจืก, ื•ื•ืึธืก ืื™ื– ืžืขืจ ื–ื™ื›ืขืจ ืื•ืŸ ื‘ืึทืงื•ื•ืขื.

ืงืจืึธื ืก ื–ืขื ืขืŸ ืกืึทืคึผืœื™ื™ื“ ื•ื•ื™ ืึท ื’ืึทื ื’ ืคื•ืŸ ืฆื•ื•ื™ื™ ืžื’ื™ืœื”: ื“ื™ ืงืขืกื™ื™ื“ืขืจื“ื™ืง ืคืœื™ืกื ื“ื™ืง Cron Daemon ืื•ืŸ ื“ื™ Crontab ื ื•ืฆืŸ ื‘ื ื™ืžืฆื ืคึฟืึทืจ ื™ื•ื–ืขืจื–. ื“ื™ ื™ืขื ืขืจ ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืจืขื“ืึทื’ื™ืจืŸ ืึทืจื‘ืขื˜ ื˜ื™ืฉืŸ ืกืคึผืขืฆื™ืคื™ืฉ ืฆื• ื™ืขื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืื™ืŸ ื“ื™ ืกื™ืกื˜ืขื, ื‘ืฉืขืช ื“ื™ ื“ื™ื™ืžืึทืŸ ืœืึธื ื˜ืฉื™ื– ื˜ืึทืกืงืก ืคึฟื•ืŸ ื‘ืึทื ื™ืฆืขืจ ืื•ืŸ ืกื™ืกื˜ืขื ื˜ื™ืฉืŸ.

ะ’ POSIX ื ืึธืจืžืึทืœ ื“ื™ ื ืึทื˜ื•ืจ ืคื•ืŸ ื“ื™ ื“ื™ื™ืžืึทืŸ ืื™ื– ื ื™ืฉื˜ ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ ืงื™ื™ืŸ ื•ื•ืขื’ ืื•ืŸ ื‘ืœื•ื™ื– ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืคึผืจืึธื’ืจืึทื ืื™ื– ืคืึธืจืžืึทืœื™ื™ื–ื“ crontab. ื“ื™ ืขืงื–ื™ืกื˜ืขื ืฅ ืคื•ืŸ ืžืขืงืึทื ื™ื–ืึทืžื– ืคึฟืึทืจ ืœืึธื ื˜ืฉื™ื ื’ ื‘ืึทื ื™ืฆืขืจ ื˜ืึทืกืงืก ืื™ื–, ืคื•ืŸ ืงื•ืจืก, ื™ืžืคึผืœื™ื™ื“, ืึธื‘ืขืจ ื ื™ืฉื˜ ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ ื“ืขื˜ืึทืœ.

ื“ื•ืจืš ืจื•ืคืŸ ื“ื™ Crontab ื ื•ืฆืŸ, ืื™ืจ ืงืขื ืขืŸ ื˜ืึธืŸ ืคื™ืจ ื˜ื™ื ื’ื–: ืจืขื“ืึทื’ื™ืจืŸ ื“ืขื ื‘ืึทื ื™ืฆืขืจ 'ืก ื˜ืึทืกืง ื˜ื™ืฉ ืื™ืŸ ื“ืขืจ ืจืขื“ืึทืงื˜ืึธืจ, ืœืึธื“ืŸ ื“ื™ ื˜ื™ืฉ ืคึฟื•ืŸ ืึท ื˜ืขืงืข, ื•ื•ื™ื™ึทื–ืŸ ื“ืขื ืงืจืึทื ื˜ ืึทืจื‘ืขื˜ ื˜ื™ืฉ ืื•ืŸ ื•ื™ืกืžืขืงืŸ ื“ื™ ืึทืจื‘ืขื˜ ื˜ื™ืฉ. ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ ื•ื•ื™ ื“ื™ Crontab ื ื•ืฆืŸ ืึทืจื‘ืขื˜:

crontab -e # ั€ะตะดะฐะบั‚ะธั€ะพะฒะฐั‚ัŒ ั‚ะฐะฑะปะธั†ัƒ ะทะฐะดะฐั‡
crontab -l # ะฟะพะบะฐะทะฐั‚ัŒ ั‚ะฐะฑะปะธั†ัƒ ะทะฐะดะฐั‡
crontab -r # ัƒะดะฐะปะธั‚ัŒ ั‚ะฐะฑะปะธั†ัƒ ะทะฐะดะฐั‡
crontab path/to/file.crontab # ะทะฐะณั€ัƒะทะธั‚ัŒ ั‚ะฐะฑะปะธั†ัƒ ะทะฐะดะฐั‡ ะธะท ั„ะฐะนะปะฐ

ื•ื•ืขืŸ ื’ืขืจื•ืคืŸ crontab -e ื“ืขืจ ืจืขื“ืึทืงื˜ืึธืจ ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ ื ืึธืจืžืึทืœ ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ EDITOR.

ื“ื™ ื˜ืึทืกืงืก ื–ื™ืš ื–ืขื ืขืŸ ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืคึฟืึธืจืžืึทื˜:

# ัั‚ั€ะพะบะธ-ะบะพะผะผะตะฝั‚ะฐั€ะธะธ ะธะณะฝะพั€ะธั€ัƒัŽั‚ัั
#
# ะทะฐะดะฐั‡ะฐ, ะฒั‹ะฟะพะปะฝัะตะผะฐั ะตะถะตะผะธะฝัƒั‚ะฝะพ
* * * * * /path/to/exec -a -b -c
# ะทะฐะดะฐั‡ะฐ, ะฒั‹ะฟะพะปะฝัะตะผะฐั ะฝะฐ 10-ะน ะผะธะฝัƒั‚ะต ะบะฐะถะดะพะณะพ ั‡ะฐัะฐ
10 * * * * /path/to/exec -a -b -c
# ะทะฐะดะฐั‡ะฐ, ะฒั‹ะฟะพะปะฝัะตะผะฐั ะฝะฐ 10-ะน ะผะธะฝัƒั‚ะต ะฒั‚ะพั€ะพะณะพ ั‡ะฐัะฐ ะบะฐะถะดะพะณะพ ะดะฝั ะธ ะธัะฟะพะปัŒะทัƒัŽั‰ะฐั ะฟะตั€ะตะฝะฐะฟั€ะฐะฒะปะตะฝะธะต ัั‚ะฐะฝะดะฐั€ั‚ะฝะพะณะพ ะฟะพั‚ะพะบะฐ ะฒั‹ะฒะพะดะฐ
10 2 * * * /path/to/exec -a -b -c > /tmp/cron-job-output.log

ื“ื™ ืขืจืฉื˜ืข ืคื™ื ืฃ ืคืขืœื“ืขืจ ืคื•ืŸ ื“ื™ ืจืขืงืึธืจื“ืก: ืžื™ื ื•ื˜ [1..60], ืฉืขื” [0..23], ื˜ืขื’ ืคื•ืŸ ื—ื•ื“ืฉ [1..31], ื—ื“ืฉื™ื [1..12], ื˜ืขื’ ืคื•ืŸ ื“ืขืจ ื•ื•ืึธืš [0. .6], ื•ื•ื•ึผ 0 ืื™ื– ื–ื•ื ื˜ื™ืง. ื“ื™ ืœืขืฆื˜ืข, ื–ืขืงืกื˜, ืคืขืœื“ ืื™ื– ืึท ืฉื•ืจื” ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ื“ื•ืจืš ื“ื™ ื ืึธืจืžืึทืœ ื‘ืึทืคึฟืขืœ ื™ื‘ืขืจื–ืขืฆืขืจ.

ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืคื™ื ืฃ ืคืขืœื“ืขืจ, ื•ื•ืึทืœื•ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืœื™ืกื˜ืขื“ ืืคื’ืขืฉื™ื™ื“ื˜ ื“ื•ืจืš ืงืึธืžืข:

# ะทะฐะดะฐั‡ะฐ, ะฒั‹ะฟะพะปะฝัะตะผะฐั ะฒ ะฟะตั€ะฒัƒัŽ ะธ ะดะตััั‚ัƒัŽ ะผะธะฝัƒั‚ั‹ ะบะฐะถะดะพะณะพ ั‡ะฐัะฐ
1,10 * * * * /path/to/exec -a -b -c

ืื“ืขืจ ืžื™ื˜ ื ืžืงืฃ:

# ะทะฐะดะฐั‡ะฐ, ะฒั‹ะฟะพะปะฝัะตะผะฐั ะฒ ะบะฐะถะดัƒัŽ ะธะท ะฟะตั€ะฒั‹ั… ะดะตััั‚ะธ ะผะธะฝัƒั‚ ะบะฐะถะดะพะณะพ ั‡ะฐัะฐ
0-9 * * * * /path/to/exec -a -b -c

ื‘ืึทื ื™ืฆืขืจ ืึทืงืกืขืก ืฆื• ื˜ืึทืกืง ืกืงืขื“ื–ืฉื•ืœื™ื ื’ ืื™ื– ืจืขื’ื™ืึทืœื™ื™ื˜ืึทื“ ืื™ืŸ POSIX ื“ื•ืจืš ื“ื™ cron.allow ืื•ืŸ cron.deny ื˜ืขืงืขืก, ื•ื•ืึธืก ืจื™ืกืคึผืขืงื˜ื™ื•ื•ืœื™ ืจืฉื™ืžื” ื™ื•ื–ืขืจื– ืžื™ื˜ ืึทืงืกืขืก ืฆื• crontab ืื•ืŸ ื ื™ืฆืขืจืก ืึธืŸ ืึทืงืกืขืก ืฆื• ื“ื™ ืคึผืจืึธื’ืจืึทื. ื“ืขืจ ืกื˜ืึทื ื“ืึทืจื˜ ืจืขื’ื•ืœื™ืจื˜ ื ื™ืฉื˜ ื“ืขื ืึธืจื˜ ืคื•ืŸ ื“ื™ ื˜ืขืงืขืก ืื™ืŸ ืงื™ื™ืŸ ื•ื•ืขื’.

ืœื•ื™ื˜ ื“ืขืจ ื ืึธืจืžืึทืœ, ืื™ืŸ ืžื™ื ื“ืกื˜ืขืจ ืคื™ืจ ืกื•ื•ื™ื•ื•ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืžื•ื–ืŸ ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืฆื• ืœืึธื ื˜ืฉื˜ ืžื’ื™ืœื”:

  1. HOME - ื‘ืึทื ื™ืฆืขืจ ืก ื”ื™ื™ื ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ.
  2. LOGNAME - ื‘ืึทื ื™ืฆืขืจ ืœืึธื’ื™ืŸ.
  3. PATH ืื™ื– ื“ืขืจ ื“ืจืš ื•ื•ื• ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ื ืึธืจืžืึทืœ ืกื™ืกื˜ืขื ื™ื•ื˜ื™ืœืึทื˜ื™ื–.
  4. SHELL - ื“ืจืš ืฆื• ื“ื™ ื’ืขื•ื•ื™ื™ื ื˜ ื‘ืึทืคึฟืขืœ ื™ื‘ืขืจื–ืขืฆืขืจ.

ื ืึธื•ื˜ืึทื‘ืœื™, POSIX ื–ืื’ื˜ ื’ืึธืจื ื™ืฉื˜ ื•ื•ืขื’ืŸ ื•ื•ื• ื“ื™ ื•ื•ืึทืœื•ืขืก ืคึฟืึทืจ ื“ื™ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืงื•ืžืขืŸ ืคื•ืŸ.

ื‘ืขืกื˜ืขืจ ืกืขืœืœืขืจ - Vixie Cron 3.0pl1

ื“ืขืจ ืคึผืจืึธืกื˜ ืึธื•ื•ืขืก ืคื•ืŸ ืคืึธืœืงืก ืงืจืึธืŸ ื•ื•ืขืจื™ืึทื ืฅ ืื™ื– Vixie cron 3.0pl1, ื‘ืึทืงืขื ืขื  ืื™ืŸ ื“ื™ comp.sources.unix ืžื™ื™ืœื™ื ื’ ืจืฉื™ืžื” ืื™ืŸ 1992. ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทื˜ืจืึทื›ื˜ืŸ ื“ื™ ื”ื•ื™ืคึผื˜ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ ื“ืขื ื•ื•ืขืจืกื™ืข ืื™ืŸ ืžืขืจ ื“ืขื˜ืึทืœ.

Vixie cron ืงื•ืžื˜ ืื™ืŸ ืฆื•ื•ื™ื™ ืžื’ื™ืœื” (cron ืื•ืŸ crontab). ื•ื•ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš, ื“ื™ ื“ื™ื™ืžืึทืŸ ืื™ื– ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ืœื™ื™ืขื ืขืŸ ืื•ืŸ ืœื•ื™ืคืŸ ื˜ืึทืกืงืก ืคื•ืŸ ื“ื™ ืกื™ืกื˜ืขื ื˜ืึทืกืง ื˜ื™ืฉ ืื•ืŸ ื™ื—ื™ื“ ื‘ืึทื ื™ืฆืขืจ ื˜ืึทืกืง ื˜ื™ืฉืŸ, ืื•ืŸ ื“ื™ Crontab ื ื•ืฆืŸ ืื™ื– ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ืขื“ื™ื˜ื™ื ื’ ื‘ืึทื ื™ืฆืขืจ ื˜ื™ืฉืŸ.

ื˜ืึทืกืง ื˜ื™ืฉ ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก

ื“ื™ ืกื•ืคึผืขืจื•ืกืขืจ ืึทืจื‘ืขื˜ ื˜ื™ืฉ ืื™ื– ืœื™ื’ืŸ ืื™ืŸ /etc/crontab. ื“ืขืจ ืกื™ื ื˜ืึทืงืก ืคื•ืŸ ื“ื™ ืกื™ืกื˜ืขื ื˜ื™ืฉ ืงืึธืจืึทืกืคึผืึทื ื“ื– ืฆื• ื“ื™ ืกื™ื ื˜ืึทืงืก ืคื•ืŸ Vixie cron, ืžื™ื˜ ื“ื™ ื•ื™ืกื ืขื ืึทื– ื“ื™ ื–ืขืงืกื˜ ื–ื™ื™ึทืœ ืื™ืŸ ืขืก ื™ื ื“ื™ืงื™ื™ืฅ ื“ื™ ื ืึธืžืขืŸ ืคื•ืŸ ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืื•ื ื˜ืขืจ ื•ื•ืขืžืขื ืก ื‘ื™ื›ืึทืฃ ื“ื™ ืึทืจื‘ืขื˜ ืื™ื– ืœืึธื ื˜ืฉื˜:

# ะ—ะฐะฟัƒัะบะฐะตั‚ัั ะตะถะตะผะธะฝัƒั‚ะฝะพ ะพั‚ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั vlad
* * * * * vlad /path/to/exec

ืจืขื’ื•ืœืขืจ ื‘ืึทื ื™ืฆืขืจ ื˜ืึทืกืง ื˜ื™ืฉืŸ ื–ืขื ืขืŸ ืœื™ื’ืŸ ืื™ืŸ /var/cron/tabs/username ืื•ืŸ ื ื•ืฆืŸ ื“ื™ ื–ืขืœื‘ืข ืกื™ื ื˜ืึทืงืก. ื•ื•ืขืŸ ืื™ืจ ืœื•ื™ืคืŸ ื“ื™ Crontab ื ื•ืฆืŸ ื•ื•ื™ ืึท ื‘ืึทื ื™ืฆืขืจ, ื“ืึธืก ื–ืขื ืขืŸ ื“ื™ ื˜ืขืงืขืก ื•ื•ืึธืก ื–ืขื ืขืŸ ืขื“ื™ื˜ื™ื“.

ื“ื™ ืจืฉื™ืžื•ืช ืคื•ืŸ ื™ื•ื–ืขืจื– ืžื™ื˜ ืึทืงืกืขืก ืฆื• Crontab ื–ืขื ืขืŸ ื’ืขืจืื˜ืŸ ืื™ืŸ ื“ื™ /var/cron/allow ืื•ืŸ /var/cron/deny ื˜ืขืงืขืก, ื•ื•ื• ืื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึทืจื™ื™ึทืŸ ื“ื™ ื‘ืึทื ื™ืฆืขืจ ื ืึธืžืขืŸ ืื™ืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืฉื•ืจื”.

ืขืงืกื˜ืขื ื“ืขื“ ืกื™ื ื˜ืึทืงืก

ืงืึทืžืคึผืขืจื“ ืฆื• POSIX crontab, Paul Vixey ืก ืœื™ื™ื–ื•ื ื’ ื›ึผื•ืœืœ ืขื˜ืœืขื›ืข ื–ื™ื™ืขืจ ื ื•ืฆื™ืง ืžืึธื“ื™ืคื™ืงืึทื˜ื™ืึธื ืก ืฆื• ื“ื™ ืกื™ื ื˜ืึทืงืก ืคื•ืŸ ื“ื™ ืึทืจื‘ืขื˜ ื˜ื™ืฉืŸ ืคื•ืŸ ื“ื™ ื™ื•ื˜ื™ืœืึทื˜ื™ื–.

ื ื ื™ื™ึทืข ื˜ื™ืฉ ืกื™ื ื˜ืึทืงืก ืื™ื– ื‘ื ื™ืžืฆื: ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืจ ืงืขื ืขืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื˜ืขื’ ืคื•ืŸ ื“ืขืจ ื•ื•ืึธืš ืึธื“ืขืจ ื—ื“ืฉื™ื ื“ื•ืจืš ื ืึธืžืขืŸ (ืžืื ื˜ืื’, ื“ื™ื ืกื˜ื™ืง, ืื•ืŸ ืึทื–ื•ื™ ืื•ื™ืฃ):

# ะ—ะฐะฟัƒัะบะฐะตั‚ัั ะตะถะตะผะธะฝัƒั‚ะฝะพ ะฟะพ ะฟะพะฝะตะดะตะปัŒะฝะธะบะฐะผ ะธ ะฒั‚ะพั€ะฝะธะบะฐะผ ะฒ ัะฝะฒะฐั€ะต
* * * Jan Mon,Tue /path/to/exec

ืื™ืจ ืงืขื ืขืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืฉืจื™ื˜ ื“ื•ืจืš ื•ื•ืึธืก ื˜ืึทืกืงืก ื–ืขื ืขืŸ ืœืึธื ื˜ืฉื˜:

# ะ—ะฐะฟัƒัะบะฐะตั‚ัั ั ัˆะฐะณะพะผ ะฒ ะดะฒะต ะผะธะฝัƒั‚ั‹
*/2 * * * Mon,Tue /path/to/exec

ืกื˜ืขืคึผืก ืื•ืŸ ื™ื ื˜ืขืจื•ื•ืึทืœื– ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืžื™ืฉื˜:

# ะ—ะฐะฟัƒัะบะฐะตั‚ัั ั ัˆะฐะณะพะผ ะฒ ะดะฒะต ะผะธะฝัƒั‚ั‹ ะฒ ะฟะตั€ะฒั‹ั… ะดะตััั‚ัŒ ะผะธะฝัƒั‚ ะบะฐะถะดะพะณะพ ั‡ะฐัะฐ
0-10/2 * * * * /path/to/exec

ื™ื ื˜ื•ืึทื˜ื™ื•ื• ืึทืœื˜ืขืจื ืึทื˜ื™ื•ื•ืขืก ืฆื• ื“ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ืกื™ื ื˜ืึทืงืก ื–ืขื ืขืŸ ื’ืขืฉื˜ื™ืฆื˜ (ืจืขื‘ืึธืึธื˜, ื™ืึธืจื™ืง, ืึทื ื™ื•ืึทืœื™, ื›ื•ื™ื“ืขืฉืœืขืš, ื•ื•ืื›ื ืฉืจื™ืคื˜, ื˜ืขื’ืœืขืš, ื”ืึทืœื‘ื ืึทื›ื˜, ืึทื•ืจืœื™):

# ะ—ะฐะฟัƒัะบะฐะตั‚ัั ะฟะพัะปะต ะฟะตั€ะตะทะฐะณั€ัƒะทะบะธ ัะธัั‚ะตะผั‹
@reboot /exec/on/reboot
# ะ—ะฐะฟัƒัะบะฐะตั‚ัั ั€ะฐะท ะฒ ะดะตะฝัŒ
@daily /exec/daily
# ะ—ะฐะฟัƒัะบะฐะตั‚ัั ั€ะฐะท ะฒ ั‡ะฐั
@hourly /exec/daily

ืึทืจื‘ืขื˜ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืกื•ื•ื™ื•ื•ืข

Vixie Cron ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื˜ื•ื™ืฉืŸ ื“ื™ ืกื•ื•ื™ื•ื•ืข ืคื•ืŸ โ€‹โ€‹ืคืœื™ืกื ื“ื™ืง ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–.

ื“ื™ ืกื•ื•ื™ื•ื•ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– USER, LOGNAME ืื•ืŸ HOME ื–ืขื ืขืŸ ื ื™ืฉื˜ ื‘ืœื•ื™ื– ืฆื•ื’ืขืฉื˜ืขืœื˜ ื“ื•ืจืš ื“ื™ ื“ื™ื™ืžืึทืŸ, ืึธื‘ืขืจ ื–ืขื ืขืŸ ื’ืขื ื•ืžืขืŸ ืคื•ืŸ ืึท ื˜ืขืงืข passwd. ื“ื™ PATH ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ ืฆื• "/usr/bin:/bin" ืื•ืŸ ื“ื™ SHELL ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ ืฆื• "/bin/sh". ื“ื™ ื•ื•ืึทืœื•ืขืก ืคื•ืŸ ืึทืœืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืึทื—ื•ืฅ LOGNAME ืงืขื ืขืŸ ื–ื™ื™ืŸ ื˜ืฉื™ื™ื ื“ื–ืฉื“ ืื™ืŸ ื‘ืึทื ื™ืฆืขืจ ื˜ื™ืฉืŸ.

ืขื˜ืœืขื›ืข ืกื•ื•ื™ื•ื•ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– (ืจื•ื‘ึฟ ื ืึธื•ื˜ืึทื‘ืœื™ SHELL ืื•ืŸ HOME) ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜ ื“ื•ืจืš Cron ื–ื™ืš ืฆื• ืœื•ื™ืคืŸ ื“ื™ ืึทืจื‘ืขื˜. ื“ืึธ ืก ื•ื•ืึธืก ื ื™ืฆืŸ bash ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ื ืึธืจืžืึทืœ ืฉ ืฆื• ืœื•ื™ืคืŸ ืžื ื”ื’ ื˜ืึทืกืงืก ืงืขืŸ ืงื•ืงืŸ ื•ื•ื™:

SHELL=/bin/bash
HOME=/tmp/
# exec ะฑัƒะดะตั‚ ะทะฐะฟัƒั‰ะตะฝ bash-ะตะผ ะฒ /tmp/
* * * * * /path/to/exec

ืœืขืกืึธืฃ, ืึทืœืข ื™ื ื•ื•ื™ื™ืจืึทื ืžืขื ืึทืœ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื“ื™ืคื™ื™ื ื“ ืื™ืŸ ื“ื™ ื˜ื™ืฉ (ื’ืขื ื™ืฆื˜ ื“ื•ืจืš Cron ืึธื“ืขืจ ื“ืืจืฃ ื“ื•ืจืš ื“ืขื ืคึผืจืึธืฆืขืก) ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืฆื• ื“ื™ ืคืœื™ืกื ื“ื™ืง ืึทืจื‘ืขื˜.

ืฆื• ืจืขื“ืึทื’ื™ืจืŸ ื˜ืขืงืขืก, crontab ื ื™ืฆื˜ ื“ืขื ืจืขื“ืึทืงื˜ืึธืจ ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ VISUAL ืึธื“ืขืจ EDITOR ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง. ืื•ื™ื‘ ื“ื™ ืกื•ื•ื™ื•ื•ืข ื•ื•ื• ืงืจืึธื ื˜ืึทื‘ ืื™ื– ื’ืขื•ื•ืขืŸ ืœื•ื™ืคืŸ ื”ืื˜ ื ื™ืฉื˜ ื“ื™ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื“ื™ืคื™ื™ื ื“, "/usr/ucb/vi" ืื™ื– ื’ืขื ื™ืฆื˜ (ucb ืื™ื– ืžื™ืกื˜ืึธืžืข ื“ื™ ืื•ื ื™ื•ื•ืขืจืกื™ื˜ืขื˜ ืคื•ืŸ ืงืึทืœื™ืคืึธืจื ื™ืึท, ื‘ืขืจืงืœื™).

cron ืื•ื™ืฃ ื“ืขื‘ื™ืึทืŸ ืื•ืŸ ื•ื‘ื•ื ื˜ื•

ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืคื•ืŸ ื“ืขื‘ื™ืึทืŸ ืื•ืŸ ื“ืขืจื™ื•ื•ืึทื˜ ื“ื™ืกื˜ืจื™ื‘ื™ื•ืฉืึทื ื– ื”ืึธื‘ืŸ ื‘ืืคืจื™ื™ื˜ ื”ืขื›ืกื˜ ืžืึทื“ืึทืคื™ื™ื“ ื•ื•ืขืจืกื™ืข Vixie Cron ื•ื•ืขืจืกื™ืข 3.0pl1. ืขืก ื–ืขื ืขืŸ ืงื™ื™ืŸ ื“ื™ืคืขืจืึทื ืกื™ื– ืื™ืŸ ื“ื™ ืกื™ื ื˜ืึทืงืก ืคื•ืŸ ื˜ื™ืฉ ื˜ืขืงืขืก ืคึฟืึทืจ ื™ื•ื–ืขืจื–, ืขืก ืื™ื– ื“ื™ ื–ืขืœื‘ืข ื•ื•ื™ืงืกื™ ืงืจื•ืŸ. ื‘ื™ื’ืึทืกื˜ ื ื™ื™ึท ืฉื˜ืจื™ืš: ืฉื˜ื™ืฆืŸ ืกื™ืกืœืึธื’, SELinux ะธ ืคึผืึทื.

ื•ื•ื™ื™ื ื™ืงืขืจ ื‘ืืžืขืจืงื˜, ืึธื‘ืขืจ ืžืึทืžืึธืฉืขืกื“ื™ืง ืขื ื“ืขืจื•ื ื’ืขืŸ ืึทืจื™ื™ึทื ื ืขืžืขืŸ ื“ื™ ืึธืจื˜ ืคื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก ืื•ืŸ ืึทืจื‘ืขื˜ ื˜ื™ืฉืŸ.

ื‘ืึทื ื™ืฆืขืจ ื˜ื™ืฉืŸ ืื™ืŸ ื“ืขื‘ื™ืึทืŸ ื–ืขื ืขืŸ ืœื™ื’ืŸ ืื™ืŸ ื“ื™ /var/spool/cron/crontabs ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ, ื“ื™ ืกื™ืกื˜ืขื ื˜ื™ืฉ ืื™ื– ื ืึธืš ื“ืึธืจื˜ - ืื™ืŸ /etc/crontab. ื“ืขื‘ื™ืึทืŸ ืคึผืขืงืœ-ืกืคึผืขืฆื™ืคื™ืฉ ืึทืจื‘ืขื˜ ื˜ื™ืฉืŸ ื–ืขื ืขืŸ ื’ืขืฉื˜ืขืœื˜ ืื™ืŸ /etc/cron.d, ืคึฟื•ืŸ ื•ื•ื• ื“ื™ Cron daemon ืœื™ื™ืขื ื˜ ื–ื™ื™ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ. ื‘ืึทื ื™ืฆืขืจ ืึทืงืกืขืก ืงืึธื ื˜ืจืึธืœ ืื™ื– ืงืึทื ื˜ืจืึธื•ืœื“ ื“ื•ืจืš ื“ื™ /etc/cron.allow ืื•ืŸ /etc/cron.deny ื˜ืขืงืขืก.

ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืฉืึธืœ ืื™ื– ื ืึธืš /bin/sh, ื•ื•ืึธืก ืื™ืŸ ื“ืขื‘ื™ืึทืŸ ืื™ื– ืึท ืงืœื™ื™ืŸ POSIX-ื’ืขื”ืึธืจื›ื™ืง ืฉืึธืœ ืœืึธืš, ืœืึธื ื˜ืฉื˜ ืึธืŸ ืœื™ื™ืขื ืขืŸ ืงื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ (ืื™ืŸ ื ื™ื˜-ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื• ืžืึธื“ืข).

Cron ื–ื™ืš ืื™ืŸ ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื“ืขื‘ื™ืึทืŸ ืื™ื– ืœืึธื ื˜ืฉื˜ ื“ื•ืจืš systemd, ืื•ืŸ ื“ื™ ืงืึทื˜ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื•ื•ื™ื•ื“ ืื™ืŸ /lib/systemd/system/cron.service. ืขืก ืื™ื– ื’ืึธืจื ื™ืฉื˜ ืกืคึผืขืฆื™ืขืœ ืื™ืŸ ื“ื™ ืกืขืจื•ื•ื™ืก ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ืงื™ื™ืŸ ืžืขืจ ืกืึทื˜ืึทืœ ืึทืจื‘ืขื˜ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ื“ื•ืจืš ื™ื ื•ื•ื™ื™ืจืึทื ืžืขื ืึทืœ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื’ืœื™ื™ืš ืื™ืŸ ื“ื™ ืงืจืึทื ื˜ืึทื‘ ืคื•ืŸ ื™ืขื“ืขืจ ื‘ืึทื ื™ืฆืขืจ.

ืงืจืึธื ื™ืข ืื•ื™ืฃ RedHat, Fedora ืื•ืŸ CentOS

ืงืจืึธื ื™ืข - ื’ืึธืคึผืœ ืคื•ืŸ Vixie Cron ื•ื•ืขืจืกื™ืข 4.1. ื•ื•ื™ ืื™ืŸ ื“ืขื‘ื™ืึทืŸ, ื“ื™ ืกื™ื ื˜ืึทืงืก ืื™ื– ื ื™ืฉื˜ ืคืืจืขื ื“ืขืจื˜, ืึธื‘ืขืจ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ PAM ืื•ืŸ SELinux, ืืจื‘ืขื˜ืŸ ืื™ืŸ ืึท ืงื ื•ื™ืœ, ื˜ืจืึทืงื™ื ื’ ื˜ืขืงืขืก ืžื™ื˜ ื™ื ืึธื˜ื™ืคื™ ืื•ืŸ ืื ื“ืขืจืข ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืื™ื– ืฆื•ื’ืขื’ืขื‘ืŸ.

ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ื– ืื™ืŸ ื“ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ืขืจื˜ืขืจ: ื“ื™ ืกื™ืกื˜ืขื ื˜ื™ืฉ ืื™ื– ืื™ืŸ /etc/crontab, ืคึผืึทืงืึทื“ื–ืฉืึทื– ืฉื˜ืขืœืŸ ื–ื™ื™ืขืจ ื˜ื™ืฉืŸ ืื™ืŸ /etc/cron.d, ื‘ืึทื ื™ืฆืขืจ ื˜ื™ืฉืŸ ื’ื™ื™ืŸ ืื™ืŸ /var/spool/cron/crontabs.

ื“ืขืจ ื“ื™ื™ืžืึทืŸ ืœื•ื™ืคื˜ ืื•ื ื˜ืขืจ ืกื™ืกื˜ืขื ืงืึธื ื˜ืจืึธืœ, ื“ื™ ืกืขืจื•ื•ื™ืก ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ื– /lib/systemd/system/crond.service.

ืื•ื™ืฃ ืจืขื“ ื”ืึทื˜-ื•ื•ื™ ื“ื™ืกื˜ืจื™ื‘ื™ื•ืฉืึทื ื–, / bin/sh ืื™ื– ื’ืขื ื™ืฆื˜ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ื‘ื™ื™ ืกื˜ืึทืจื˜ืึทืคึผ, ื•ื•ืึธืก ืื™ื– ื“ืขืจ ื ืึธืจืžืึทืœ ื‘ืึทืฉ. ืขืก ื–ืึธืœ ื–ื™ื™ืŸ ื‘ืืžืขืจืงื˜ ืึทื– ื•ื•ืขืŸ ืื™ืจ ืœื•ื™ืคืŸ Cron ื“ื–ืฉืึธื‘ืก ื“ื•ืจืš /bin/sh, ื“ื™ ื‘ืึทืฉ ืฉืึธืœ ืกื˜ืึทืจืฅ ืื™ืŸ POSIX-ื’ืขื”ืึธืจื›ื™ืง ืžืึธื“ืข ืื•ืŸ ืงืขืŸ ื ื™ืฉื˜ ืœื™ื™ืขื ืขืŸ ืงื™ื™ืŸ ื ืึธืš ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ืคืœื™ืกื ื“ื™ืง ืื™ืŸ ื ื™ื˜-ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื• ืžืึธื“ืข.

cronie ืื™ืŸ SLES ืื•ืŸ openSUSE

ื“ื™ ื“ื™ื™ึทื˜ืฉ ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ SLES ืื•ืŸ ื–ื™ื™ืŸ ื“ืขืจื™ื•ื•ืึทื˜ ืึธืคึผืขื ืกื•ืกืข ื ื•ืฆืŸ ื“ื™ ื–ืขืœื‘ืข ืงืจืึธื ื™ืข. ื“ื™ ื“ื™ื™ืžืึทืŸ ื“ืึธ ืื™ื– ืื•ื™ืš ืœืึธื ื˜ืฉื˜ ืื•ื ื˜ืขืจ systemd, ื“ื™ ืกืขืจื•ื•ื™ืก ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ื– ืœื™ื’ืŸ ืื™ืŸ /usr/lib/systemd/system/cron.service. ืงืึธื ืคื™ื’ื•ืจืึทื˜ื™ืึธืŸ: /etc/crontab, /etc/cron.d, /var/spool/cron/tabs. /bin/sh ืื™ื– ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ื‘ืึทืฉ ืคืœื™ืกื ื“ื™ืง ืื™ืŸ POSIX-ื’ืขื”ืึธืจื›ื™ืง ื ื™ื˜-ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื• ืžืึธื“ืข.

Vixie Cron ืžื™ื˜ืœ

ืžืึธื“ืขืจืŸ ืงื™ื ื“ืกืงื™ื ื“ืขืจ ืคื•ืŸ Cron ื”ืึธื‘ืŸ ื ื™ืฉื˜ ืจืึทื“ื™ืงืึทืœืœื™ ื’ืขื‘ื™ื˜ืŸ ืงืึทืžืคึผืขืจื“ ืžื™ื˜ Vixie Cron, ืึธื‘ืขืจ ื ืึธืš ืงื•ื ื” ื ื™ื™ึท ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ื•ื•ืึธืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ืคืืจืœืื ื’ื˜ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ื™ ืคึผืจื™ื ืกืึทืคึผืึทืœื– ืคื•ืŸ ื“ื™ ืคึผืจืึธื’ืจืึทื. ืคื™ืœืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ื™ืงืกื˜ืขื ืฉืึทื ื– ื–ืขื ืขืŸ ืฉื•ื•ืึทืš ื“ื™ื–ื™ื™ื ื“ ืื•ืŸ ืฆืขืžื™ืฉืŸ ื“ื™ ืงืึธื“. ื“ืขืจ ืึธืจื™ื’ื™ื ืขืœ ืงืจืึทืŸ ืžืงื•ืจ ืงืึธื“ ืคื•ืŸ Paul Vixey ืื™ื– ืึท ืคืึทืจื’ืขื ื™ื’ืŸ ืฆื• ืœื™ื™ืขื ืขืŸ.

ื“ืขืจื™ื‘ืขืจ, ืื™ืš ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืคื•ื ืึทื ื“ืขืจืงืœื™ื™ึทื‘ืŸ ื“ื™ Cron ืžื™ื˜ืœ ืžื™ื˜ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ืึท Cron ืคึผืจืึธื’ืจืึทื ืคึผืจืึธืกื˜ ืคึฟืึทืจ ื‘ื™ื™ื“ืข ืฆื•ื•ื™ื™ื’ืŸ ืคื•ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ - Vixie Cron 3.0pl1. ืื™ืš ื•ื•ืขืœ ืคืึทืจืคึผืึธืฉืขื˜ืขืจืŸ ื“ื™ ื‘ื™ื™ืฉืคื™ืœืŸ ื“ื•ืจืš ืจื™ืžื•ื•ื•ื™ื ื’ ifdefs ื•ื•ืึธืก ืงืึธืžืคึผืœื™ืฆื™ืจืŸ ืœื™ื™ืขื ืขืŸ ืื•ืŸ ืึธื•ืžื™ื˜ื™ื ื’ ืžื™ื ืขืจื•ื•ืขืจื˜ื™ืง ื“ืขื˜ืึทื™ืœืก.

ื“ื™ ืึทืจื‘ืขื˜ ืคื•ืŸ ื“ื™ ืฉืขื“ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืฆืขื˜ื™ื™ืœื˜ ืื™ืŸ ืขื˜ืœืขื›ืข ืกื˜ืึทื’ืขืก:

  1. ืคึผืจืึธื’ืจืึทื ื™ื ื™ื˜ื™ืึทืœื™ื–ืึทื˜ื™ืึธืŸ.
  2. ืงืึทืœืขืงื˜ื™ื ื’ ืื•ืŸ ืึทืคึผื“ื™ื™ื˜ื™ื ื’ ื“ื™ ืจืฉื™ืžื” ืคื•ืŸ ื˜ืึทืกืงืก ืฆื• ืœื•ื™ืคืŸ.
  3. ื”ื•ื™ืคึผื˜ ืงืจื•ืŸ ืฉืœื™ื™ืฃ ืคืœื™ืกื ื“ื™ืง.
  4. ืึธื ื”ื™ื™ื‘ืŸ ืึท ืึทืจื‘ืขื˜.

ื–ืืœ ืก ืงื•ืง ื‘ื™ื™ึท ื–ื™ื™ ืื™ืŸ ืกื“ืจ.

ื™ื ื™ื˜ื™ืึทืœื™ื–ืึทื˜ื™ืึธืŸ

ื•ื•ืขืŸ ืกื˜ืึทืจื˜ืขื“, ื ืึธืš ืงืึธื ื˜ืจืึธืœื™ืจื•ื ื’ ื“ื™ ืคึผืจืึธืฆืขืก ืึทืจื’ื•ืžืขื ื˜ืŸ, Cron ื™ื ืกื˜ืึธืœื– ื“ื™ SIGCHLD ืื•ืŸ SIGHUP ืกื™ื’ื ืึทืœ ื”ืึทื ื“ืœืขืจืก. ื“ืขืจ ืขืจืฉื˜ืขืจ ืžืื›ื˜ ืึท ืงืœืึธืฅ ืคึผืึธื–ื™ืฆื™ืข ื•ื•ืขื’ืŸ ื“ื™ ื˜ืขืจืžืึทื ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ืขื ืงื™ื ื“ ืคึผืจืึธืฆืขืก, ื“ื™ ืจื’ืข ืงืœืึธื•ื–ื™ื– ื“ื™ ื˜ืขืงืข ื“ื™ืกืงืจื™ืคึผื˜ืึธืจ ืคื•ืŸ ื“ื™ ืงืœืึธืฅ ื˜ืขืงืข:

signal(SIGCHLD, sigchld_handler);
signal(SIGHUP, sighup_handler);

ื“ื™ Cron Daemon ืœื•ื™ืคื˜ ืฉื˜ืขื ื“ื™ืง ืึทืœื™ื™ืŸ ืื•ื™ืฃ ื“ื™ ืกื™ืกื˜ืขื, ื‘ืœื•ื™ื– ื•ื•ื™ ืึท ืกื•ืคึผืขืจื•ืกืขืจ ืื•ืŸ ืคึฟื•ืŸ ื“ื™ ื”ื•ื™ืคึผื˜ Cron Directory. ื“ื™ ืคืืœื’ืขื ื“ืข ืงืึทืœืœืก ืฉืึทืคึฟืŸ ืึท ืฉืœืึธืก ื˜ืขืงืข ืžื™ื˜ ื“ื™ PID ืคื•ืŸ ื“ื™ ื“ื™ื™ืžืึทืŸ ืคึผืจืึธืฆืขืก, ืžืึทื›ืŸ ื–ื™ื›ืขืจ ืึทื– ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืื™ื– ืจื™ื›ื˜ื™ืง ืื•ืŸ ื˜ื•ื™ืฉืŸ ื“ื™ ืงืจืึทื ื˜ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืฆื• ื“ื™ ื”ื•ื™ืคึผื˜ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ:

acquire_daemonlock(0);
set_cron_uid();
set_cron_cwd();

ื“ืขืจ ืคืขืœื™ืงื™ื™ึทื˜ ื“ืจืš ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜, ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ื•ื•ืขืŸ ืกื˜ืึทืจื˜ื™ื ื’ ืคึผืจืึทืกืขืกืึทื–:

setenv("PATH", _PATH_DEFPATH, 1);

ื“ืขืจื ืึธืš ื“ืขืจ ืคึผืจืึธืฆืขืก ืื™ื– "ื“ืขืžืึธื ื™ื–ืขื“": ืขืก ืงืจื™ื™ื™ืฅ ืึท ืงื™ื ื“ ืงืึธืคึผื™ืข ืคื•ืŸ โ€‹โ€‹ื“ืขื ืคึผืจืึธืฆืขืก ื“ื•ืจืš ืจื•ืคืŸ ื’ืึธืคึผืœ ืื•ืŸ ืึท ื ื™ื™ึทืข ืกืขืกื™ืข ืื™ืŸ ื“ืขื ืงื™ื ื“ ืคึผืจืึธืฆืขืก (ืคืึทืš ืกืขืกื™ื“). ื“ืขืจ ืคืึธื˜ืขืจ ืคึผืจืึธืฆืขืก ืื™ื– ื ื™ื˜ ืžืขืจ ื“ืืจืฃ, ืื•ืŸ ืขืก ื’ื™ื™ื˜:

switch (fork()) {
case -1:
    /* ะบั€ะธั‚ะธั‡ะตัะบะฐั ะพัˆะธะฑะบะฐ ะธ ะทะฐะฒะตั€ัˆะตะฝะธะต ั€ะฐะฑะพั‚ั‹ */
    exit(0);
break;
case 0:
    /* ะดะพั‡ะตั€ะฝะธะน ะฟั€ะพั†ะตัั */
    (void) setsid();
break;
default:
    /* ั€ะพะดะธั‚ะตะปัŒัะบะธะน ะฟั€ะพั†ะตัั ะทะฐะฒะตั€ัˆะฐะตั‚ ั€ะฐะฑะพั‚ัƒ */
    _exit(0);
}

ื˜ืขืจืžืึทื ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ืคืึธื˜ืขืจ ืคึผืจืึธืฆืขืก ืจื™ืœื™ืกื™ื– ื“ื™ ืฉืœืึธืก ืื•ื™ืฃ ื“ื™ ืฉืœืึธืก ื˜ืขืงืข. ืื™ืŸ ื“ืขืจืฆื•, ืขืก ืื™ื– ืคืืจืœืื ื’ื˜ ืฆื• ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ PID ืื™ืŸ ื“ืขืจ ื˜ืขืงืข ืฆื• ื“ืขื ืงื™ื ื“. ื ืึธืš ื“ืขื, ื“ื™ ืึทืจื‘ืขื˜ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ื– ืึธื ื’ืขืคื™ืœื˜ ืื™ืŸ:

/* ะฟะพะฒั‚ะพั€ะฝั‹ะน ะทะฐั…ะฒะฐั‚ ะปะพะบะฐ */
acquire_daemonlock(0);

/* ะ—ะฐะฟะพะปะฝะตะฝะธะต ะ‘ะ”  */
database.head = NULL;
database.tail = NULL;
database.mtime = (time_t) 0;
load_database(&database);

ื“ืขืจื ืึธืš Cron ืžืึทืš ืื•ื™ืฃ ืฆื• ื“ื™ ื”ื•ื™ืคึผื˜ ืึทืจื‘ืขื˜ ืฆื™ืงืœ. ืื‘ืขืจ ืื™ื™ื“ืขืจ ืึทื–, ืขืก ืื™ื– ื•ื•ืขืจื˜ ืึท ืงื•ืง ืื™ืŸ ืœืึธื•ื“ื™ื ื’ ื“ื™ ืึทืจื‘ืขื˜ ืจืฉื™ืžื”.

ืงืึทืœืขืงื˜ื™ื ื’ ืื•ืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื“ื™ ืึทืจื‘ืขื˜ ืจืฉื™ืžื”

ื“ื™ load_database ืคื•ื ืงืฆื™ืข ืื™ื– ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ืœืึธื•ื“ื™ื ื’ ื“ื™ ืจืฉื™ืžื” ืคื•ืŸ ื˜ืึทืกืงืก. ืขืก ื˜ืฉืขืงืก ื“ื™ ื”ื•ื™ืคึผื˜ ืกื™ืกื˜ืขื ืงืจืึธื ื˜ืึทื‘ ืื•ืŸ ื“ื™ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืžื™ื˜ ื‘ืึทื ื™ืฆืขืจ ื˜ืขืงืขืก. ืื•ื™ื‘ ื“ื™ ื˜ืขืงืขืก ืื•ืŸ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ืคืืจืขื ื“ืขืจื˜, ื“ื™ ืึทืจื‘ืขื˜ ืจืฉื™ืžื” ืื™ื– ื ื™ืฉื˜ ืฉื™ื™ึทืขืš-ืœื™ื™ืขื ืขืŸ. ืึทื ื“ืขืจืฉ, ืึท ื ื™ื™ึทืข ืจืฉื™ืžื” ืคื•ืŸ ื˜ืึทืกืงืก ื”ื™ื™ื‘ื˜ ืฆื• ืคืึธืจืขื.

ืœืึธื•ื“ื™ื ื’ ืึท ืกื™ืกื˜ืขื ื˜ืขืงืข ืžื™ื˜ ืกืคึผืขืฆื™ืขืœ ื˜ืขืงืข ืื•ืŸ ื˜ื™ืฉ ื ืขืžืขืŸ:

/* ะตัะปะธ ั„ะฐะนะป ัะธัั‚ะตะผะฝะพะน ั‚ะฐะฑะปะธั†ั‹ ะธะทะผะตะฝะธะปัั, ะฟะตั€ะตั‡ะธั‚ั‹ะฒะฐะตะผ */
if (syscron_stat.st_mtime) {
    process_crontab("root", "*system*",
    SYSCRONTAB, &syscron_stat,
    &new_db, old_db);
}

ืœืึธื•ื“ื™ื ื’ ื‘ืึทื ื™ืฆืขืจ ื˜ื™ืฉืŸ ืื™ืŸ ืึท ืฉืœื™ื™ืฃ:

while (NULL != (dp = readdir(dir))) {
    char    fname[MAXNAMLEN+1],
            tabname[MAXNAMLEN+1];
    /* ั‡ะธั‚ะฐั‚ัŒ ั„ะฐะนะปั‹ ั ั‚ะพั‡ะบะพะน ะฝะต ะฝะฐะดะพ*/
    if (dp->d_name[0] == '.')
            continue;
    (void) strcpy(fname, dp->d_name);
    sprintf(tabname, CRON_TAB(fname));
    process_crontab(fname, fname, tabname,
                    &statbuf, &new_db, old_db);
}

ื ืึธืš ื•ื•ืึธืก ื“ื™ ืึทืœื˜ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ื– ืจื™ืคึผืœื™ื™ืกื˜ ืžื™ื˜ ืึท ื ื™ื™ึทืข.

ืื™ืŸ ื“ื™ ื‘ื™ื™ืฉืคื™ืœืŸ ืื•ื™ื‘ืŸ, ื“ื™ ืคึผืจืึทืกืขืก_ืงืจืึธื ื˜ืึทื‘ ืคึฟื•ื ืงืฆื™ืข ืจื•ืคืŸ ื•ื•ืขืจืึทืคื™ื™ื– ืึทื– ืึท ื‘ืึทื ื™ืฆืขืจ ื•ื•ืึธืก ืจื™ื›ื˜ืŸ ื“ื™ ื˜ื™ืฉ ื˜ืขืงืข ื ืึธืžืขืŸ ื™ื’ื–ื™ืกืฅ (ืกื™ื™ึทื“ืŸ ืขืก ืื™ื– ืึท ืกื•ืคึผืขืจื•ืกืขืจ) ืื•ืŸ ื“ืึทืŸ ืจื•ืคื˜ load_user. ื“ืขืจ ื™ืขื ืขืจ ืœื™ื™ืขื ื˜ ืฉื•ื™ืŸ ื“ื™ ื˜ืขืงืข ื–ื™ืš ืฉื•ืจื” ื“ื•ืจืš ืฉื•ืจื”:

while ((status = load_env(envstr, file)) >= OK) {
    switch (status) {
    case ERR:
        free_user(u);
        u = NULL;
        goto done;
    case FALSE:
        e = load_entry(file, NULL, pw, envp);
        if (e) {
            e->next = u->crontab;
            u->crontab = e;
        }
        break;
    case TRUE:
        envp = env_set(envp, envstr);
        break;
    }
}

ื“ืึธ, ืึธื“ืขืจ ื“ื™ ื™ื ื•ื•ื™ื™ืจืึทื ืžืขื ืึทืœ ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ืื™ื– ื‘ืึทืฉื˜ื™ืžื˜ (ืœื™ื ืขืก ืคื•ืŸ ื“ื™ ืคืึธืจืขื VAR = ื•ื•ืขืจื˜) ื ื™ืฆืŸ ื“ื™ load_env / env_set ืคืึทื ื’ืงืฉืึทื ื–, ืึธื“ืขืจ ื“ื™ ืึทืจื‘ืขื˜ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืื™ื– ืœื™ื™ืขื ืขืŸ (* * * * * /path/to/exec) ื ื™ืฆืŸ ื“ื™ load_entry ืคื•ื ืงืฆื™ืข.

ื“ื™ ืคึผืึธื–ื™ืฆื™ืข ืขื ื˜ื™ื˜ื™ ืึทื– load_entry ืงืขืจื˜ ืื™ื– ืื•ื ื“ื–ืขืจ ืึทืจื‘ืขื˜, ื•ื•ืึธืก ืื™ื– ื’ืขืฉื˜ืขืœื˜ ืื™ืŸ ื“ืขืจ ืึทืœื’ืขืžื™ื™ืŸ ืจืฉื™ืžื” ืคื•ืŸ ื˜ืึทืกืงืก. ื“ื™ ืคึฟื•ื ืงืฆื™ืข ื–ื™ืš ืคื™ืจื˜ ืึท ื•ื•ืขืจื‘ืึธื•ืก ืคึผืึทืจืกื™ื ื’ ืคื•ืŸ ื“ื™ ืฆื™ื™ื˜ ืคึฟืึธืจืžืึทื˜, ืึธื‘ืขืจ ืžื™ืจ ื–ืขื ืขืŸ ืžืขืจ ืื™ื ื˜ืขืจืขืกื™ืจื˜ ืื™ืŸ ื“ื™ ืคืึธืจืžื™ืจื•ื ื’ ืคื•ืŸ ืกื•ื•ื™ื•ื•ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืื•ืŸ ืึทืจื‘ืขื˜ ืงืึทื˜ืขืจ ืคึผืึทืจืึทืžืขื˜ืขืจืก:

/* ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŒ ะธ ะณั€ัƒะฟะฟะฐ ะดะปั ะทะฐะฟัƒัะบะฐ ะทะฐะดะฐั‡ะธ ะฑะตั€ัƒั‚ัั ะธะท passwd*/
e->uid = pw->pw_uid;
e->gid = pw->pw_gid;

/* ัˆะตะปะป ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ (/bin/sh), ะตัะปะธ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŒ ะฝะต ัƒะบะฐะทะฐะป ะดั€ัƒะณะพะต */
e->envp = env_copy(envp);
if (!env_get("SHELL", e->envp)) {
    sprintf(envstr, "SHELL=%s", _PATH_BSHELL);
    e->envp = env_set(e->envp, envstr);
}
/* ะดะพะผะฐัˆะฝัั ะดะธั€ะตะบั‚ะพั€ะธั */
if (!env_get("HOME", e->envp)) {
    sprintf(envstr, "HOME=%s", pw->pw_dir);
    e->envp = env_set(e->envp, envstr);
}
/* ะฟัƒั‚ัŒ ะดะปั ะฟะพะธัะบะฐ ะฟั€ะพะณั€ะฐะผะผ */
if (!env_get("PATH", e->envp)) {
    sprintf(envstr, "PATH=%s", _PATH_DEFPATH);
    e->envp = env_set(e->envp, envstr);
}
/* ะธะผั ะฟะพะปัŒะทะพะฒั‚ะตะปั ะฒัะตะณะดะฐ ะธะท passwd */
sprintf(envstr, "%s=%s", "LOGNAME", pw->pw_name);
e->envp = env_set(e->envp, envstr);

ื“ืขืจ ื”ื•ื™ืคึผื˜ ืฉืœื™ื™ืฃ ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ื™ ืงืจืึทื ื˜ ืจืฉื™ืžื” ืคื•ืŸ ื˜ืึทืกืงืก.

ื”ื•ื™ืคึผื˜ ืฉืœื™ื™ืฃ

ื“ืขืจ ืึธืจื™ื’ื™ื ืขืœ ืงืจื•ืŸ ืคื•ืŸ ื•ื•ืขืจืกื™ืข 7 ื™ื•ื ื™ืงืก ื’ืขืืจื‘ืขื˜ ื’ืึทื ืฅ ืคึผืฉื•ื˜: ืขืก ืจื™ืœื™ื™ืขื ื˜ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ืŸ ืึท ืฉืœื™ื™ืฃ, ืœืึธื ื˜ืฉื˜ ื“ื™ ื˜ืึทืกืงืก ืคื•ืŸ ื“ื™ ืงืจืึทื ื˜ ืžื™ื ื•ื˜ ื•ื•ื™ ืึท ืกื•ืคึผืขืจ ื‘ืึทื ื™ืฆืขืจ ืื•ืŸ ืกืœืขืคึผื˜ ื‘ื™ื– ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืžื™ื ื•ื˜. ื“ืขื ืคึผืฉื•ื˜ ืฆื•ื’ืึทื ื’ ืื•ื™ืฃ ืขืœื˜ืขืจืข ืžืืฉื™ื ืขืŸ ืคืืจืœืื ื’ื˜ ืฆื• ืคื™ืœืข ืจืขืกื•ืจืกืŸ.

ืึทืŸ ืึทืœื˜ืขืจื ืึทื˜ื™ื•ื•ืข ื•ื•ืขืจืกื™ืข ืื™ื– ื’ืขื•ื•ืขืŸ ืคืืจื’ืขืœื™ื™ื’ื˜ ืื™ืŸ SysV, ืื™ืŸ ื•ื•ืึธืก ื“ื™ ื“ื™ื™ืžืึทืŸ ื’ืขื’ืื ื’ืขืŸ ืฆื• ืฉืœืึธืคืŸ ืึธื“ืขืจ ื‘ื™ื– ื“ื™ ื ื™ืจืึทืกื˜ ืžื™ื ื•ื˜ ืคึฟืึทืจ ื•ื•ืึธืก ื“ื™ ืึทืจื‘ืขื˜ ืื™ื– ื“ื™ืคื™ื™ื ื“, ืึธื“ืขืจ ืคึฟืึทืจ 30 ืžื™ื ื•ื˜. ื•ื•ื™ื™ื ื™ืงืขืจืข ืจืขืกื•ืจืกืŸ ื–ืขื ืขืŸ ืงืึทื ืกื•ืžื“ ืคึฟืึทืจ ืฉื™ื™ึทืขืš-ืœื™ื™ืขื ืขืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื•ืŸ ืงืึธื ื˜ืจืึธืœื™ืจื•ื ื’ ื˜ืึทืกืงืก ืื™ืŸ ื“ืขื ืžืึธื“ืข, ืึธื‘ืขืจ ื’ืขืฉื•ื•ื™ื ื“ ืึทืคึผื“ื™ื™ื˜ื™ื ื’ ื“ื™ ืจืฉื™ืžื” ืคื•ืŸ ื˜ืึทืกืงืก ื’ืขื•ื•ืืจืŸ ื•ืžื‘ืึทืงื•ื•ืขื.

Vixie Cron ื”ืึธื˜ ื–ื™ืš ืื•ืžื’ืขืงืขืจื˜ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืึทืจื‘ืขื˜ ืจืฉื™ืžื•ืช ืึทืžืึธืœ ืึท ืžื™ื ื•ื˜, ืฆื•ืž ื’ืœื™ืง ืื™ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ื™ 80 ืก, ืขืก ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ ื‘ืื˜ื™ื™ื˜ื™ืง ืžืขืจ ืจืขืกื•ืจืกืŸ ืื•ื™ืฃ ื ืึธืจืžืึทืœ ื™ื•ื ื™ืงืก ืžืืฉื™ื ืขืŸ:

/* ะฟะตั€ะฒะธั‡ะฝะฐั ะทะฐะณั€ัƒะทะบะฐ ะทะฐะดะฐั‡ */
load_database(&database);
/* ะทะฐะฟัƒัั‚ะธั‚ัŒ ะทะฐะดะฐั‡ะธ, ะฟะพัั‚ะฐะฒะปะตะฝะฝั‹ะต ะบ ะฒั‹ะฟะพะปะฝะตะฝะธัŽ ะฟะพัะปะต ะฟะตั€ะตะทะฐะณั€ัƒะทะบะธ ัะธัั‚ะตะผั‹ */
run_reboot_jobs(&database);
/* ัะดะตะปะฐั‚ัŒ TargetTime ะฝะฐั‡ะฐะปะพะผ ะฑะปะธะถะฐะนัˆะตะน ะผะธะฝัƒั‚ั‹ */
cron_sync();
while (TRUE) {
    /* ะฒั‹ะฟะพะปะฝะธั‚ัŒ ะทะฐะดะฐั‡ะธ, ะฟะพัะปะต ั‡ะตะณะพ ัะฟะฐั‚ัŒ ะดะพ TargetTime ั ะฟะพะฟั€ะฐะฒะบะพะน ะฝะฐ ะฒั€ะตะผั, ะฟะพั‚ั€ะฐั‡ะตะฝะฝะพะต ะฝะฐ ะทะฐะดะฐั‡ะธ */
    cron_sleep();

    /* ะฟะตั€ะตั‡ะธั‚ะฐั‚ัŒ ะบะพะฝั„ะธะณัƒั€ะฐั†ะธัŽ */
    load_database(&database);

    /* ัะพะฑั€ะฐั‚ัŒ ะทะฐะดะฐั‡ะธ ะดะปั ะดะฐะฝะฝะพะน ะผะธะฝัƒั‚ั‹ */
    cron_tick(&database);

    /* ะฟะตั€ะตะฒะตัั‚ะธ TargetTime ะฝะฐ ะฝะฐั‡ะฐะปะพ ัะปะตะดัƒัŽั‰ะตะน ะผะธะฝัƒั‚ั‹ */
    TargetTime += 60;
}

ื“ื™ cron_sleep ืคึฟื•ื ืงืฆื™ืข ืื™ื– ื’ืœื™ื™ืš ื™ื ื•ื•ืึทืœื•ื•ื“ ืื™ืŸ ืขืงืกืึทืงื™ื•ื˜ื™ื ื’ ื˜ืึทืกืงืก, ืจื•ืคืŸ ื“ื™ ืึทืจื‘ืขื˜_ืจื•ื ืงื•ื•ืขื•ืข (ื ื•ืžืขืจื™ื™ื˜ ืื•ืŸ ืœื•ื™ืคืŸ ื˜ืึทืกืงืก) ืื•ืŸ ื˜ืึธืŸ_ืงืึธืžืึทื ื“ (ืœื•ื™ืคืŸ ื™ืขื“ืขืจ ื™ื—ื™ื“ ืึทืจื‘ืขื˜) ืคืึทื ื’ืงืฉืึทื ื–. ื“ื™ ืœืขืฆื˜ืข ืคึฟื•ื ืงืฆื™ืข ืื™ื– ื•ื•ืขืจื˜ ืฆื• ื•ื ื˜ืขืจื–ื•ื›ืŸ ืื™ืŸ ืžืขืจ ื“ืขื˜ืึทืœ.

ืคืœื™ืกื ื“ื™ืง ืึท ืึทืจื‘ืขื˜

ื“ื™ do_command ืคื•ื ืงืฆื™ืข ืื™ื– ืขืงืกืึทืงื™ื•ื˜ืึทื“ ืื™ืŸ ืึท ื’ื•ื˜ ื™ื•ื ื™ืงืก ื ื•ืกื—, ื“ืึธืก ืื™ื–, ืขืก ืื™ื– ืึท ื’ืึธืคึผืœ ืฆื• ื“ื•ืจื›ืคื™ืจืŸ ื“ื™ ืึทืจื‘ืขื˜ ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืกืœื™. ื“ืขืจ ืคืึธื˜ืขืจ ืคึผืจืึธืฆืขืก ื”ืืœื˜ ืฆื• ืงืึทื˜ืขืจ ื˜ืึทืกืงืก, ื“ืขืจ ืงื™ื ื“ ืคึผืจืึธืฆืขืก ืคึผืจื™ืคึผืขืจื– ื“ื™ ืึทืจื‘ืขื˜ ืคึผืจืึธืฆืขืก:

switch (fork()) {
case -1:
    /*ะฝะต ัะผะพะณะปะธ ะฒั‹ะฟะพะปะฝะธั‚ัŒ fork */
    break;
case 0:
    /* ะดะพั‡ะตั€ะฝะธะน ะฟั€ะพั†ะตัั: ะฝะฐ ะฒััะบะธะน ัะปัƒั‡ะฐะน ะตั‰ะต ั€ะฐะท ะฟั€ะพะฑัƒะตะผ ะทะฐั…ะฒะฐั‚ะธั‚ัŒ ะณะปะฐะฒะฝั‹ะน ะปะพะบ */
    acquire_daemonlock(1);
    /* ะฟะตั€ะตั…ะพะดะธะผ ะบ ั„ะพั€ะผะธั€ะพะฒะฐะฝะธัŽ ะฟั€ะพั†ะตััะฐ ะทะฐะดะฐั‡ะธ */
    child_process(e, u);
    /* ะฟะพ ะทะฐะฒะตั€ัˆะตะฝะธัŽ ะดะพั‡ะตั€ะฝะธะน ะฟั€ะพั†ะตัั ะทะฐะบะฐะฝั‡ะธะฒะฐะตั‚ ั€ะฐะฑะพั‚ัƒ */
    _exit(OK_EXIT);
    break;
default:
    /* ั€ะพะดะธั‚ะตะปัŒัะบะธะน ะฟั€ะพั†ะตัั ะฟั€ะพะดะพะปะถะฐะตั‚ ั€ะฐะฑะพั‚ัƒ */
    break;
}

ืขืก ืื™ื– ื’ืึทื ืฅ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืœืึธื’ื™ืง ืื™ืŸ ืงื™ื ื“_ืคึผืจืึธืกืขืกืก: ืขืก ืึทืงืกืขืคึผืฅ ื ืึธืจืžืึทืœ ืจืขื–ื•ืœื˜ืึทื˜ ืื•ืŸ ื˜ืขื•ืช ืกื˜ืจื™ืžื–, ืื•ืŸ ืกืขื ื“ื– ื–ื™ื™ ืฆื• ืคึผืึธืกื˜ (ืื•ื™ื‘ ื“ื™ MAILTO ื™ื ื•ื•ื™ื™ืจืึทื ืžืขื ืึทืœ ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ืื™ื– ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ ืึทืจื‘ืขื˜ ื˜ื™ืฉ), ืื•ืŸ ืœืขืกืึธืฃ ื•ื•ื™ื™ืฅ ืคึฟืึทืจ ื“ื™ ื”ื•ื™ืคึผื˜ ืคึผืจืึธืฆืขืก ืคื•ืŸ ื“ื™ ืึทืจื‘ืขื˜. ื’ืึทื ืฅ.

ื“ืขืจ ืึทืจื‘ืขื˜ ืคึผืจืึธืฆืขืก ืื™ื– ื’ืขืฉืืคืŸ ื“ื•ืจืš ืืŸ ืื ื“ืขืจ ื’ืึธืคึผืœ:

switch (vfork()) {
case -1:
    /* ะฟั€ะธ ะพัˆะธะฑะบะธ ัั€ะฐะทัƒ ะทะฐะฒะตั€ัˆะฐะตั‚ัั ั€ะฐะฑะพั‚ะฐ */
    exit(ERROR_EXIT);
case 0:
    /* ะฟั€ะพั†ะตัั-ะฒะฝัƒะบ ั„ะพั€ะผะธั€ัƒะตั‚ ะฝะพะฒัƒัŽ ัะตััะธัŽ, ั‚ะตั€ะผะธะฝะฐะป ะธ ั‚.ะด.
     */
    (void) setsid();

    /*
     * ะดะฐะปัŒัˆะต ะผะฝะพะณะพัะปะพะฒะฝะฐั ะฝะฐัั‚ั€ะพะนะบะฐ ะฒั‹ะฒะพะดะฐ ะฟั€ะพั†ะตััะฐ, ะพะฟัƒัั‚ะธะผ ะดะปั ะบั€ะฐั‚ะบะพัั‚ะธ
     */

    /* ัะผะตะฝะฐ ะดะธั€ะตะบั‚ะพั€ะธะธ, ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั ะธ ะณั€ัƒะฟะฟั‹ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั,
     * ั‚ะพ ะตัั‚ัŒ ะฟั€ะพั†ะตัั ะฑะพะปัŒัˆะต ะฝะต ััƒะฟะตั€ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŒัะบะธะน
     */
    setgid(e->gid);
    setuid(e->uid);
    chdir(env_get("HOME", e->envp));

    /* ะทะฐะฟัƒัะบ ัะฐะผะพะน ะบะพะผะฐะฝะดั‹
     */
    {
        /* ะฟะตั€ะตะผะตะฝะฝะฐั ะพะบั€ัƒะถะตะฝะธั SHELL ัƒะบะฐะทั‹ะฒะฐะตั‚ ะฝะฐ ะธะฝั‚ะตั€ะฟั€ะตั‚ะฐั‚ะพั€ ะดะปั ะทะฐะฟัƒัะบะฐ */
        char    *shell = env_get("SHELL", e->envp);

        /* ะฟั€ะพั†ะตัั ะทะฐะฟัƒัะบะฐะตั‚ัั ะฑะตะท ะฟะตั€ะตะดะฐั‡ะธ ะพะบั€ัƒะถะตะฝะธั ั€ะพะดะธั‚ะตะปัŒัะบะพะณะพ ะฟั€ะพั†ะตััะฐ,
         * ั‚ะพ ะตัั‚ัŒ ะธะผะตะฝะฝะพ ั‚ะฐะบ, ะบะฐะบ ะพะฟะธัะฐะฝะพ ะฒ ั‚ะฐะฑะปะธั†ะต ะทะฐะดะฐั‡ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั  */
        execle(shell, shell, "-c", e->cmd, (char *)0, e->envp);

        /* ะพัˆะธะฑะบะฐ โ€” ะธ ะฟั€ะพั†ะตัั ะฝะฐ ะทะฐะฟัƒัั‚ะธะปัั? ะทะฐะฒะตั€ัˆะตะฝะธะต ั€ะฐะฑะพั‚ั‹ */
        perror("execl");
        _exit(ERROR_EXIT);
    }
    break;
default:
    /* ัะฐะผ ะฟั€ะพั†ะตัั ะฟั€ะพะดะพะปะถะฐะตั‚ ั€ะฐะฑะพั‚ัƒ: ะถะดะตั‚ ะทะฐะฒะตั€ัˆะตะฝะธั ั€ะฐะฑะพั‚ั‹ ะธ ะฒั‹ะฒะพะดะฐ */
    break;
}

ืึทื– ืก ื‘ื™ื™ืกื™ืงืœื™ ืึทืœืข ืงืจืึธืŸ ืื™ื–. ืื™ืš ืื™ื‘ืขืจื’ืขื”ื™ืคึผืขืจื˜ ืขื˜ืœืขื›ืข ื˜ืฉื™ืงืึทื•ื•ืข ื“ืขื˜ืึทื™ืœืก, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืึทืงืึทื•ื ื˜ื™ื ื’ ืคึฟืึทืจ ื•ื•ื™ื™ึทื˜ ื ื™ืฆืขืจืก, ืึธื‘ืขืจ ืื™ืš ืึทื•ื˜ืœื™ื™ื ื“ ื“ื™ ื”ื•ื™ืคึผื˜ ื–ืึทืš.

ืึทืคื˜ืขืจื•ื•ืึธืจื“

Cron ืื™ื– ืึท ืกืึทืคึผืจื™ื™ื–ื™ื ื’ืœื™ ืคึผืฉื•ื˜ ืื•ืŸ ื ื•ืฆื™ืง ืคึผืจืึธื’ืจืึทื, ื’ืขืžืื›ื˜ ืื™ืŸ ื“ื™ ื‘ืขืกื˜ืขืจ ื˜ืจืื“ื™ืฆื™ืขืก ืคื•ืŸ ื“ื™ ื™ื•ื ื™ืงืก ื•ื•ืขืœื˜. ื–ื™ ื˜ื•ื˜ ื ื™ืฉื˜ ื˜ืึธืŸ ืขืคึผืขืก ืขืงืกื˜ืจืข, ืึธื‘ืขืจ ื–ื™ ืื™ื– ื˜ืืŸ ืื™ืจ ืึทืจื‘ืขื˜ ื•ื•ืึทื ื“ืขืจืคืึทืœื™ ืคึฟืึทืจ ืขื˜ืœืขื›ืข ื“ืขืงืึทื“ืขืก ืื™ืฆื˜. ื‘ืึทืงื•ืžืขืŸ ื“ื•ืจืš ื“ืขื ืงืึธื“ ืคึฟืึทืจ ื“ื™ ื•ื•ืขืจืกื™ืข ื•ื•ืึธืก ืงื•ืžื˜ ืžื™ื˜ ื•ื‘ื•ื ื˜ื• ื’ืขื ื•ืžืขืŸ ื ื™ื˜ ืžืขืจ ื•ื•ื™ ืึท ืฉืขื”, ืื•ืŸ ืื™ืš ื”ืื˜ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืฉืคึผืึทืก! ืื™ืš ื”ืืฃ ืื™ืš ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ื™ื›ื•ืœืช ืฆื• ื˜ื™ื™ืœืŸ ืขืก ืžื™ื˜ ืื™ืจ.

ืื™ืš ื•ื•ื™ื™ืก ื ื™ืฉื˜ ื•ื•ืขื’ืŸ ื“ื™ืจ, ืึธื‘ืขืจ ืื™ืš ื‘ื™ืŸ ืึท ื‘ื™ืกืœ ื˜ืจื•ื™ืขืจื™ืง ืฆื• ืคืึทืจืฉื˜ื™ื™ืŸ ืึทื– ืžืึธื“ืขืจืŸ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’, ืžื™ื˜ ื–ื™ื™ึทืŸ ื˜ืขื ื“ืขื ืฅ ืฆื• ื™ื‘ืขืจ-ืงืึธืžืคึผืœื™ืฆื™ืจืŸ ืื•ืŸ ืื™ื‘ืขืจ-ืึทื‘ืกื˜ืจืึทืงื˜, ืื™ื– ื ื™ืฉื˜ ืงืึทื ื“ื•ืกื™ื•ื• ืฆื• ืึทื–ืึท ืคึผืึทืฉื˜ืขืก ืคึฟืึทืจ ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜.

ืขืก ื–ืขื ืขืŸ ืคื™ืœืข ืžืึธื“ืขืจืŸ ืึทืœื˜ืขืจื ืึทื˜ื™ื•ื•ืขืก ืฆื• Cron: ืกื™ืกื˜ืขืž-ื˜ื™ื™ืžืขืจื– ืœืึธื–ืŸ ืื™ืจ ืฆื• ืึธืจื’ืึทื ื™ื–ื™ืจืŸ ืงืึธืžืคึผืœืขืงืก ืกื™ืกื˜ืขืžืขืŸ ืžื™ื˜ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื–, fcron ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืžืขืจ ืคืœืขืงืกืึทื‘ืึทืœ ืจืขื’ื•ืœื™ืจืŸ ืžื™ื˜ืœ ืงืึทื ืกืึทืžืฉืึทืŸ ื“ื•ืจืš ื˜ืึทืกืงืก. ืื‘ืขืจ ืคึผืขืจืกื ืึทืœื™, ื“ื™ ืกื™ืžืคึผืœืึทืกื˜ ืงืจืึธื ื˜ืึทื‘ ืื™ื– ืฉื˜ืขื ื“ื™ืง ื’ืขื ื•ื’ ืคึฟืึทืจ ืžื™ืจ.

ืื™ืŸ ืงื•ืจืฅ, ืœื™ื‘ ื™ื•ื ื™ืงืก, ื ื•ืฆืŸ ืคึผืฉื•ื˜ ืžื’ื™ืœื” ืื•ืŸ ื˜ืึธืŸ ื ื™ื˜ ืคืึทืจื’ืขืกืŸ ืฆื• ืœื™ื™ืขื ืขืŸ ื“ื™ ืžืึทื ืึท ืคึฟืึทืจ ื“ื™ื™ืŸ ืคึผืœืึทื˜ืคืึธืจืžืข!

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’