Linux เชฎเชพเช‚ เช•เซเชฐเซ‹เชจ: เช‡เชคเชฟเชนเชพเชธ, เช‰เชชเชฏเซ‹เช— เช…เชจเซ‡ เช‰เชชเช•เชฐเชฃ

Linux เชฎเชพเช‚ เช•เซเชฐเซ‹เชจ: เช‡เชคเชฟเชนเชพเชธ, เช‰เชชเชฏเซ‹เช— เช…เชจเซ‡ เช‰เชชเช•เชฐเชฃ

เช•เซเชฒเชพเชธเชฟเช•เซ‡ เชฒเช–เซเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เช–เซเชถ เช•เชฒเชพเช•เซ‹ เชœเซ‹เชคเชพ เชจเชฅเซ€. เชคเซ‡ เชœเช‚เช—เชฒเซ€ เชธเชฎเชฏเชฎเชพเช‚ เชจ เชคเซ‹ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฐเซ‹ เชนเชคเชพ เช…เชจเซ‡ เชจ เชคเซ‹ เชฏเซเชจเชฟเช•เซเชธ, เชชเชฐเช‚เชคเซ เช†เชœเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฐเซ‹ เช–เชพเชคเชฐเซ€เชชเซ‚เชฐเซเชตเช• เชœเชพเชฃเซ‡ เช›เซ‡: เช•เซเชฐเซ‹เชจ เชคเซ‡เชฎเชจเชพ เชฌเชฆเชฒเซ‡ เชธเชฎเชฏเชจเซ‹ เชŸเซเชฐเซ‡เช• เชฐเชพเช–เชถเซ‡.

เช†เชฆเซ‡เชถ เชตเชพเช•เซเชฏ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเช“ เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชจเชฌเชณเชพเชˆ เช…เชจเซ‡ เช•เชพเชฎเช•เชพเชœ เชฌเช‚เชจเซ‡ เช›เซ‡. sed, awk, wc, cut เช…เชจเซ‡ เช…เชจเซเชฏ เชœเซ‚เชจเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธ เชฆเชฐเชฐเซ‹เชœ เช…เชฎเชพเชฐเชพ เชธเชฐเซเชตเชฐ เชชเชฐ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชฆเซเชตเชพเชฐเชพ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชคเซ‡เชฎเชพเช‚เชจเชพ เช˜เชฃเชพ เช•เซเชฐเซ‹เชจ เชฎเชพเชŸเซ‡เชจเชพ เช•เชพเชฐเซเชฏเซ‹ เชคเชฐเซ€เช•เซ‡ เชกเชฟเชเชพเช‡เชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡, เชœเซ‡ เชฎเซ‚เชณ 70 เชจเชพ เชฆเชพเชฏเช•เชพเชจเชพ เชถเซ‡เชกเซเชฏเซ‚เชฒเชฐ เช›เซ‡.

เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏ เชธเซเชงเซ€, เชฎเซ‡เช‚ เชตเชฟเช—เชคเซ‹เชฎเชพเช‚ เช—เชฏเชพ เชตเชฟเชจเชพ, เช•เซเชฐเซ‹เชจเชจเซ‹ เชธเซเชชเชฐเชซเชฟเชธเชฟเชฏเชฒ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹, เชชเชฐเช‚เชคเซ เชเช• เชฆเชฟเชตเชธ, เชœเซเชฏเชพเชฐเซ‡ เชฎเชจเซ‡ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชฒเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เชญเซ‚เชฒ เช†เชตเซ€, เชคเซเชฏเชพเชฐเซ‡ เชฎเซ‡เช‚ เชคเซ‡เชจเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชฐเซ€เชคเซ‡ เชคเชชเชพเชธเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚. เช† เชฐเซ€เชคเซ‡ เช† เชฒเซ‡เช– เชฆเซ‡เช–เชพเชฏเซ‹, เชคเซ‡ เชฒเช–เชคเซ€ เชตเช–เชคเซ‡ เชนเซเช‚ POSIX เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌ, เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ Linux เชตเชฟเชคเชฐเชฃเซ‹เชฎเชพเช‚ เชฎเซเช–เซเชฏ เช•เซเชฐเซ‹เชจ เชตเชฟเช•เชฒเซเชชเซ‹ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚เชจเชพ เช•เซ‡เชŸเชฒเชพเช•เชจเซ€ เชฐเชšเชจเชพเชฅเซ€ เชชเชฐเชฟเชšเชฟเชค เชฅเชฏเซ‹.

เชถเซเช‚ เชคเชฎเซ‡ Linux เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹ เช…เชจเซ‡ เช•เซเชฐเซ‹เชจ เช•เชพเชฐเซเชฏเซ‹ เชšเชฒเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ‹? เชถเซเช‚ เชคเชฎเชจเซ‡ เชฏเซเชจเชฟเช•เซเชธเชฎเชพเช‚ เชธเชฟเชธเซเชŸเชฎ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐเชฎเชพเช‚ เชฐเชธ เช›เซ‡? เชชเช›เซ€ เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชฎเชพเชฐเซเช— เชชเชฐ เช›เซ€เช!

เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ

เชœเชพเชคเชฟเช“เชจเซ€ เช‰เชคเซเชชเชคเซเชคเชฟ

เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช…เชฅเชตเชพ เชธเชฟเชธเซเชŸเชฎ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธเชจเซเช‚ เชธเชพเชฎเชฏเชฟเช• เช…เชฎเชฒ เช เชคเชฎเชพเชฎ เช“เชชเชฐเซ‡เชŸเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎเซเชธเชฎเชพเช‚ เชธเซเชชเชทเซเชŸ เช†เชตเชถเซเชฏเช•เชคเชพ เช›เซ‡. เชคเซ‡เชฅเซ€, เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฐเซ‹เชจเซ‡ เชเชตเซ€ เชธเซ‡เชตเชพเช“เชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเชจเซ‹ เช…เชนเซ‡เชธเชพเชธ เชฅเชฏเซ‹ เช•เซ‡ เชœเซ‡ เชคเซ‡เชฎเชจเซ‡ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชฏ เชฐเซ€เชคเซ‡ เชฏเซ‹เชœเชจเชพ เช˜เชกเซ€ เชถเช•เซ‡ เช…เชจเซ‡ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏ เชชเชนเซ‡เชฒเชพ เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เช…เชฎเชฒ เช•เชฐเซ€ เชถเช•เซ‡.

เชฏเซเชจเชฟเช•เซเชธ เชœเซ‡เชตเซ€ เช“เชชเชฐเซ‡เชŸเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎเซ‹ เชคเซ‡เชฎเชจเซ€ เช‰เชคเซเชชเชคเซเชคเชฟเชจเซ‡ เชตเชฐเซเชเชจ 7 เชฏเซเชจเชฟเช•เซเชธ เชชเชฐ เชถเซ‹เชงเซ€ เช•เชพเชขเซ‡ เช›เซ‡, เชœเซ‡ เช›เซ‡เชฒเซเชฒเซ€ เชธเชฆเซ€เชจเชพ 70 เชจเชพ เชฆเชพเชฏเช•เชพเชฎเชพเช‚ เชฌเซ‡เชฒ เชฒเซ‡เชฌเซเชธเชฎเชพเช‚ เชตเชฟเช•เชธเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€, เชœเซ‡เชฎเชพเช‚ เชชเซเชฐเช–เซเชฏเชพเชค เช•เซ‡เชจ เชฅเซ‹เชฎเซเชชเชธเชจเชจเซ‹ เชชเชฃ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. เชตเชฐเซเชเชจ 7 เชฏเซเชจเชฟเช•เซเชธเชฎเชพเช‚ เช•เซเชฐเซ‹เชจเชจเซ‹ เชชเชฃ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡, เชœเซ‡ เชธเซเชชเชฐเชฏเซเชเชฐ เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เชจเชฟเชฏเชฎเชฟเชค เชฐเซ€เชคเซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซ‡เชตเชพ เช›เซ‡.

เชธเชพเชฎเชพเชจเซเชฏ เช†เชงเซเชจเชฟเช• เช•เซเชฐเซ‹เชจ เช เชเช• เชธเชฐเชณ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเซ‚เชณ เชธเช‚เชธเซเช•เชฐเชฃเชจเซเช‚ เช“เชชเชฐเซ‡เชŸเชฟเช‚เช— เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎ เชตเชงเซ เชธเชฐเชณ เชนเชคเซเช‚: เชธเซ‡เชตเชพ เชเช• เชฎเชฟเชจเชฟเชŸเชฎเชพเช‚ เชเช•เชตเชพเชฐ เชœเชพเช—เซ€ เชœเชพเชฏ เช›เซ‡, เชเช• เชœ เชซเชพเช‡เชฒ (/etc/lib/crontab)เชฎเชพเช‚เชฅเซ€ เช•เชพเชฐเซเชฏเซ‹ เชธเชพเชฅเซ‡เชจเซเช‚ เชŸเซ‡เชฌเชฒ เชตเชพเช‚เชšเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชซเซ‹เชฐเซเชฎ เช•เชฐเซ‡ เช›เซ‡. เชธเซเชชเชฐเชฏเซเชเชฐ เชคเซ‡ เช•เชพเชฐเซเชฏเซ‹ เช•เซ‡ เชœเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เช•เซเชทเชฃเซ‡ เช•เชฐเชตเชพ เชœเซ‹เชˆเช.

เชคเซเชฏเชพเชฐเชฌเชพเชฆ, เชฏเซเชจเชฟเช•เซเชธ เชœเซ‡เชตเซ€ เช“เชชเชฐเซ‡เชŸเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎ เชธเชพเชฅเซ‡ เชธเชฐเชณ เช…เชจเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชธเซ‡เชตเชพเชจเชพ เชธเซเชงเชพเชฐเซ‡เชฒเชพ เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เชชเซ‚เชฐเชพ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ.

เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชจเซเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชตเชฐเซเชฃเชจ เช…เชจเซ‡ เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€เชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€เชจเชพ เชฎเซ‚เชณเชญเซ‚เชค เชธเชฟเชฆเซเชงเชพเช‚เชคเซ‹เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฏเซเชจเชฟเช•เซเชธ เชœเซ‡เชตเซ€ เช“เชชเชฐเซ‡เชŸเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎเชจเชพ เชฎเซเช–เซเชฏ เชงเซ‹เชฐเชฃ - POSIX -เชฎเชพเช‚ 1992เชฎเชพเช‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹, เช…เชจเซ‡ เช† เชฐเซ€เชคเซ‡ เช•เซเชฐเซ‹เชจ เชกเชฟ เชซเซ‡เช•เซเชŸเซ‹ เชธเซเชŸเชพเชจเซเชกเชฐเซเชกเชฎเชพเช‚เชฅเซ€ เชœเซเชฏเซเชฐ เชธเซเชŸเชพเชจเซเชกเชฐเซเชก เชฌเชจเซ€ เช—เชฏเซเช‚ เชนเชคเซเช‚.

1987 เชฎเชพเช‚, เชชเซ‹เชฒ เชตเชฟเช•เซเชธเซ€เช, เชฏเซเชจเชฟเช•เซเชธ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ‡ เช•เซเชฐเซ‹เชจ เชฎเชพเชŸเซ‡เชจเซ€ เชคเซ‡เชฎเชจเซ€ เช‡เชšเซเช›เชพเช“ เชตเชฟเชถเซ‡ เชธเชฐเซเชตเซ‡เช•เซเชทเชฃ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชกเชฟเชฎเชจเชจเซเช‚ เชฌเซ€เชœเซเช‚ เชธเช‚เชธเซเช•เชฐเชฃ เชฌเชนเชพเชฐ เชชเชพเชกเซเชฏเซเช‚ เชœเซ‡เชฃเซ‡ เชชเชฐเช‚เชชเชฐเชพเช—เชค เช•เซเชฐเซ‹เชจเชจเซ€ เช•เซ‡เชŸเชฒเซ€เช• เชธเชฎเชธเซเชฏเชพเช“ เชธเซเชงเชพเชฐเซ€ เช…เชจเซ‡ เชŸเซ‡เชฌเชฒ เชซเชพเช‡เชฒเซ‹เชจเชพ เชตเชพเช•เซเชฏเชฐเชšเชจเชพเชจเซ‹ เชตเชฟเชธเซเชคเชพเชฐ เช•เชฐเซเชฏเซ‹.

เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจเชจเชพ เชคเซเชฐเซ€เชœเชพ เชธเช‚เชธเซเช•เชฐเชฃ เชฆเซเชตเชพเชฐเชพ POSIX เช†เชตเชถเซเชฏเช•เชคเชพเช“เชจเซ‡ เชชเซ‚เชฐเซเชฃ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เชฅเชฏเซเช‚, เชตเชงเซเชฎเชพเช‚, เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชชเชพเชธเซ‡ เช‰เชฆเชพเชฐ เชฒเชพเชฏเชธเชจเซเชธ เชนเชคเซเช‚, เช…เชฅเชตเชพ เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡, README เชฎเชพเช‚เชจเซ€ เช‡เชšเซเช›เชพเช“ เชธเชฟเชตเชพเชฏ เช•เซ‹เชˆ เชฒเชพเชฏเชธเชจเซเชธ เชจเชนเซ‹เชคเซเช‚: เชฒเซ‡เช–เช• เช—เซ‡เชฐเช‚เชŸเซ€ เช†เชชเชคเชพ เชจเชฅเซ€, เชฒเซ‡เช–เช•เชจเซเช‚ เชจเชพเชฎ เช•เชพเชขเซ€ เชถเช•เชพเชคเซเช‚ เชจเชฅเซ€, เช…เชจเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชซเช•เซเชค เชธเซ‹เชฐเซเชธ เช•เซ‹เชก เชธเชพเชฅเซ‡ เชตเซ‡เชšเซ€ เชถเช•เชพเชฏ เช›เซ‡. เช† เช†เชตเชถเซเชฏเช•เชคเชพเช“ เชซเซเชฐเซ€ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐเชจเชพ เชธเชฟเชฆเซเชงเชพเช‚เชคเซ‹ เชธเชพเชฅเซ‡ เชธเซเชธเช‚เช—เชค เชนเซ‹เชตเชพเชจเซเช‚ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚ เชœเซ‡ เชคเซ‡ เชตเชฐเซเชทเซ‹เชฎเชพเช‚ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏเชคเชพ เชฎเซ‡เชณเชตเซ€ เชฐเชนเซเชฏเซเช‚ เชนเชคเซเช‚, เชคเซ‡เชฅเซ€ 90 เชจเชพ เชฆเชพเชฏเช•เชพเชจเซ€ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชฆเซ‡เช–เชพเชคเชพ เช•เซ‡เชŸเชฒเชพเช• เชฎเซเช–เซเชฏ Linux เชตเชฟเชคเชฐเชฃเซ‹เช เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจเชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชธเชฟเชธเซเชŸเชฎ เชเช• เชคเชฐเซ€เช•เซ‡ เชฒเซ€เชงเซ€ เช…เชจเซ‡ เช†เชœเซ‡ เชชเชฃ เชคเซ‡เชจเซ‹ เชตเชฟเช•เชพเชธ เช•เชฐเซ€ เชฐเชนเซ€ เช›เซ‡.

เช–เชพเชธ เช•เชฐเซ€เชจเซ‡, Red Hat เช…เชจเซ‡ SUSE เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจ - เช•เซเชฐเซ‹เชจเซ€เชจเซ‹ เชซเซ‹เชฐเซเช• เชตเชฟเช•เชธเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชกเซ‡เชฌเชฟเชฏเชจ เช…เชจเซ‡ เช‰เชฌเซเชจเซเชŸเซ เช˜เชฃเชพ เชชเซ‡เชš เชธเชพเชฅเซ‡ เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจเชจเซ€ เชฎเซ‚เชณ เช†เชตเซƒเชคเซเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡.

เชšเชพเชฒเซ‹ เชชเชนเซ‡เชฒเชพ POSIX เชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เชฏเซเชเชฐ เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€ เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌเชฅเซ€ เชชเชฐเชฟเชšเชฟเชค เชฅเชˆเช, เชคเซ‡ เชชเช›เซ€ เช†เชชเชฃเซ‡ เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจเชฎเชพเช‚ เชชเซ‚เชฐเชพ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชธเชฟเชจเซเชŸเซ‡เช•เซเชธ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เช…เชจเซ‡ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ เชฒเชฟเชจเช•เซเชธ เชกเชฟเชธเซเชŸเซเชฐเชฟเชฌเซเชฏเซเชถเชจเชฎเชพเช‚ เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจเชจเซ€ เชตเชฟเชตเชฟเชงเชคเชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชœเซ‹เชˆเชถเซเช‚. เช…เชจเซ‡ เช›เซ‡เชฒเซเชฒเซ‡, เช•เซ‡เช• เชชเชฐเชจเซ€ เชšเซ‡เชฐเซ€ เช เช•เซเชฐเซ‹เชจ เชกเชฟเชฎเชจ เช‰เชชเช•เชฐเชฃเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช›เซ‡.

เชชเซ‹เชธเชฟเช•เซเชธ เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌ

เชœเซ‹ เชฎเซ‚เชณ เช•เซเชฐเซ‹เชจ เชนเช‚เชฎเซ‡เชถเชพ เชธเซเชชเชฐเชฏเซเชเชฐ เชฎเชพเชŸเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‹ เช†เชงเซเชจเชฟเช• เชถเซ‡เชกเซเชฏเซเชฒเชฐเซเชธ เช˜เชฃเซ€เชตเชพเชฐ เชธเชพเชฎเชพเชจเซเชฏ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเชพ เช•เชพเชฐเซเชฏเซ‹ เชธเชพเชฅเซ‡ เชตเซเชฏเชตเชนเชพเชฐ เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡ เชตเชงเซ เชธเซเชฐเช•เซเชทเชฟเชค เช…เชจเซ‡ เช…เชจเซเช•เซ‚เชณ เช›เซ‡.

เช•เซเชฐเซ‹เชจเซเชธ เชฌเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธเชจเชพ เชธเชฎเซ‚เชน เชคเชฐเซ€เช•เซ‡ เชชเซ‚เชฐเชพ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡: เชธเชคเชค เชšเชพเชฒเชคเซเช‚ เช•เซเชฐเซ‹เชจ เชกเชฟเชฎเชจ เช…เชจเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡ เช‰เชชเชฒเชฌเซเชง เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ. เชฌเชพเชฆเชฎเชพเช‚ เชคเชฎเชจเซ‡ เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚ เชฆเชฐเซ‡เช• เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฎเชพเชŸเซ‡ เชตเชฟเชถเชฟเชทเซเชŸ เช•เชพเชฐเซเชฏ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซ‡ เชธเช‚เชชเชพเชฆเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ เชกเชฟเชฎเชจ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช…เชจเซ‡ เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชทเซเชŸเช•เซ‹เชฎเชพเช‚เชฅเซ€ เช•เชพเชฐเซเชฏเซ‹ เชถเชฐเซ‚ เช•เชฐเซ‡ เช›เซ‡.

ะ’ POSIX เชงเซ‹เชฐเชฃ เชกเชฟเชฎเชจเชจเซ€ เชตเชฐเซเชคเชฃเซ‚เช• เช•เซ‹เชˆเชชเชฃ เชฐเซ€เชคเซ‡ เชตเชฐเซเชฃเชตเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชจเชฅเซ€ เช…เชจเซ‡ เชฎเชพเชคเซเชฐ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช”เชชเชšเชพเชฐเชฟเช• เช›เซ‡ 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 เชซเชพเช‡เชฒเซ‹ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡ เช…เชจเซเช•เซเชฐเชฎเซ‡ เช•เซเชฐเซ‰เชจเซเชŸเชพเชฌเชจเซ€ โ€‹โ€‹เชเช•เซเชธเซ‡เชธ เชงเชฐเชพเชตเชคเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เช…เชจเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ€ เชเช•เซเชธเซ‡เชธ เชตเชฟเชจเชพเชจเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ‡ เชธเซ‚เชšเชฟเชฌเชฆเซเชง เช•เชฐเซ‡ เช›เซ‡. เชฎเชพเชจเช• เช† เชซเชพเช‡เชฒเซ‹เชจเชพ เชธเซเชฅเชพเชจเชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชฐเซ€เชคเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชคเซเช‚ เชจเชฅเซ€.

เชธเซเชŸเชพเชจเซเชกเชฐเซเชก เชฎเซเชœเชฌ, เชฒเซ‹เช‚เชš เชฅเชฏเซ‡เชฒเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธ เชฎเชพเชŸเซ‡ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชšเชพเชฐ เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸ เชตเซ‡เชฐเชฟเชฏเซ‡เชฌเชฒ เชชเชพเชธ เช•เชฐเชตเชพ เช†เชตเชถเซเชฏเช• เช›เซ‡:

  1. เชนเซ‹เชฎ - เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ€ เชนเซ‹เชฎ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€.
  2. LOGNAME โ€” เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฒเซ‰เช—เชฟเชจ.
  3. PATH เช เชชเชพเชฅ เช›เซ‡ เชœเซเชฏเชพเช‚ เชคเชฎเซ‡ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชธเชฟเชธเซเชŸเชฎ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเช“ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹.
  4. เชถเซ‡เชฒ - เชตเชชเชฐเชพเชฏเซ‡เชฒ เช†เชฆเซ‡เชถ เชฆเซเชญเชพเชทเชฟเชฏเชพเชจเซ‹ เชฎเชพเชฐเซเช—.

เชจเซ‹เช‚เชงเชจเซ€เชฏ เชฐเซ€เชคเซ‡, เช† เชšเชฒเซ‹ เชฎเชพเชŸเซ‡เชจเชพ เชฎเซ‚เชฒเซเชฏเซ‹ เช•เซเชฏเชพเช‚เชฅเซ€ เช†เชตเซ‡ เช›เซ‡ เชคเซ‡ เชตเชฟเชถเซ‡ POSIX เช•เช‚เชˆ เช•เชนเซ‡เชคเซเช‚ เชจเชฅเซ€.

เชฌเซ‡เชธเซเชŸ เชธเซ‡เชฒเชฐ - Vixie cron 3.0pl1

เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ เช•เซเชฐเซ‹เชจ เชตเซ‡เชฐเชฟเช…เชจเซเชŸเซเชธเชจเซ‹ เชธเชพเชฎเชพเชจเซเชฏ เชชเซ‚เชฐเซเชตเชœ Vixie cron 3.0pl1 เช›เซ‡, เชœเซ‡ 1992เชฎเชพเช‚ comp.sources.unix เชฎเซ‡เช‡เชฒเชฟเช‚เช— เชฒเชฟเชธเซเชŸเชฎเชพเช‚ เชฐเชœเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เช…เชฎเซ‡ เช† เชธเช‚เชธเซเช•เชฐเชฃเชจเซ€ เชฎเซเช–เซเชฏ เชฒเชพเช•เซเชทเชฃเชฟเช•เชคเชพเช“เชจเซ‡ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเชˆเชถเซเช‚.

เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจ เชฌเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เช•เซเชฐเซ‹เชจ เช…เชจเซ‡ เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌ). เชนเช‚เชฎเซ‡เชถเชจเซ€ เชœเซ‡เชฎ, เชกเชฟเชฎเชจ เชธเชฟเชธเซเชŸเชฎ เชŸเชพเชธเซเช• เชŸเซ‡เชฌเชฒ เช…เชจเซ‡ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช•เชพเชฐเซเชฏ เช•เซ‹เชทเซเชŸเช•เซ‹เชฎเชพเช‚เชฅเซ€ เช•เชพเชฐเซเชฏเซ‹ เชตเชพเช‚เชšเชตเชพ เช…เชจเซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡, เช…เชจเซ‡ เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซ‡ เชธเช‚เชชเชพเชฆเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡.

เช•เชพเชฐเซเชฏ เช•เซ‹เชทเซเชŸเช• เช…เชจเซ‡ เช—เซ‹เช เชตเชฃเซ€ เชซเชพเช‡เชฒเซ‹

เชธเซเชชเชฐเชฏเซเชเชฐ เชŸเชพเชธเซเช• เชŸเซ‡เชฌเชฒ /etc/crontab เชฎเชพเช‚ เชธเซเชฅเชฟเชค เช›เซ‡. เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชทเซเชŸเช•เชจเซเช‚ เชตเชพเช•เซเชฏเชฐเชšเชจเชพ เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจเชจเชพ เชตเชพเช•เซเชฏเชฐเชšเชจเชพเชจเซ‡ เช…เชจเซเชฐเซ‚เชช เช›เซ‡, เช…เชชเชตเชพเชฆ เชธเชพเชฅเซ‡ เช•เซ‡ เชคเซ‡เชฎเชพเช‚เชจเซ€ เช›เช เซเช เซ€ เช•เซ‰เชฒเชฎ เชคเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซเช‚ เชจเชพเชฎ เชธเซ‚เชšเชตเซ‡ เช›เซ‡ เช•เซ‡ เชœเซ‡เชจเชพ เชตเชคเซ€ เช•เชพเชฐเซเชฏ เชถเชฐเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡:

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

เชจเชฟเชฏเชฎเชฟเชค เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช•เชพเชฐเซเชฏ เช•เซ‹เชทเซเชŸเช•เซ‹ /var/cron/tabs/username เชฎเชพเช‚ เชธเซเชฅเชฟเชค เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชœ เชตเชพเช•เซเชฏเชฐเชšเชจเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชคเชฐเซ€เช•เซ‡ เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ เชšเชฒเชพเชตเซ‹ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เช† เชคเซ‡ เชซเชพเช‡เชฒเซ‹ เช›เซ‡ เชœเซ‡ เชธเช‚เชชเชพเชฆเชฟเชค เชฅเชพเชฏ เช›เซ‡.

เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌเชจเซ€ โ€‹โ€‹เชเช•เซเชธเซ‡เชธ เชงเชฐเชพเชตเชคเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ€ เชฏเชพเชฆเซ€เช“ /var/cron/allow เช…เชจเซ‡ /var/cron/deny เชซเชพเช‡เชฒเซ‹เชฎเชพเช‚ เชฎเซ‡เชจเซ‡เชœ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซเชฏเชพเช‚ เชคเชฎเชพเชฐเซ‡ เชฎเชพเชคเซเชฐ เชเช• เช…เชฒเช— เชฒเชพเช‡เชจเชฎเชพเช‚ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชจเชพเชฎ เชฆเชพเช–เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชตเชฟเชธเซเชคเซƒเชค เชตเชพเช•เซเชฏเชฐเชšเชจเชพ

POSIX เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌเชจเซ€ โ€‹โ€‹เชคเซเชฒเชจเชพเชฎเชพเช‚, เชชเซ‹เชฒ เชตเชฟเช•เซเชธเซ€เชจเชพ เชธเซ‹เชฒเซเชฏเซเชถเชจเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเชจเชพ เช•เชพเชฐเซเชฏ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเชพ เชตเชพเช•เซเชฏเชฐเชšเชจเชพเชฎเชพเช‚ เช˜เชฃเชพ เช‰เชชเชฏเซ‹เช—เซ€ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เช›เซ‡.

เชเช• เชจเชตเซเช‚ เชŸเซ‡เชฌเชฒ เชธเชฟเชจเซเชŸเซ‡เช•เซเชธ เช‰เชชเชฒเชฌเซเชง เชฌเชจเซเชฏเซเช‚ เช›เซ‡: เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเชฎเซ‡ เชจเชพเชฎ เชฆเซเชตเชพเชฐเชพ เช…เช เชตเชพเชกเชฟเชฏเชพเชจเชพ เชฆเชฟเชตเชธเซ‹ เช…เชฅเชตเชพ เชฎเชนเชฟเชจเชพเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ (เชธเซ‹เชฎ, เชฎเช‚เช—เชณ เช…เชจเซ‡ เชคเซ‡เชฅเซ€ เชตเชงเซ):

# ะ—ะฐะฟัƒัะบะฐะตั‚ัั ะตะถะตะผะธะฝัƒั‚ะฝะพ ะฟะพ ะฟะพะฝะตะดะตะปัŒะฝะธะบะฐะผ ะธ ะฒั‚ะพั€ะฝะธะบะฐะผ ะฒ ัะฝะฒะฐั€ะต
* * * 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

เช•เชพเชฐเซเชฏ เช…เชฎเชฒเซ€เช•เชฐเชฃ เชตเชพเชคเชพเชตเชฐเชฃ

เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจ เชคเชฎเชจเซ‡ เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชจเซเช‚ เชตเชพเชคเชพเชตเชฐเชฃ เชฌเชฆเชฒเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹ USER, LOGNAME เช…เชจเซ‡ HOME เชซเช•เซเชค เชกเชฟเชฎเชจ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเชพเช‚ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชซเชพเช‡เชฒเชฎเชพเช‚เชฅเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡. เชชเชพเชธเชตเชก. PATH เชšเชฒ "/usr/bin:/bin" เชชเชฐ เชธเซ‡เชŸ เช›เซ‡ เช…เชจเซ‡ SHELL เชšเชฒ "/bin/sh" เชชเชฐ เชธเซ‡เชŸ เช›เซ‡. LOGNAME เชธเชฟเชตเชพเชฏเชจเชพ เชคเชฎเชพเชฎ เชšเชฒเซ‹เชจเซ€ เช•เชฟเช‚เชฎเชคเซ‹ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช•เซ‹เชทเซเชŸเช•เซ‹เชฎเชพเช‚ เชฌเชฆเชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เช•เซ‡เชŸเชฒเชพเช• เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹ (เชธเซŒเชฅเซ€ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ SHELL เช…เชจเซ‡ HOME)เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซเชฐเซ‹เชจ เชฆเซเชตเชพเชฐเชพ เช•เชพเชฐเซเชฏ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡. เช•เชธเซเชŸเชฎ เช•เชพเชฐเซเชฏเซ‹ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฎเชพเชจเช• sh เชจเซ‡ เชฌเชฆเชฒเซ‡ bash เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช†เชตเซ‹ เชฆเซ‡เช–เชพเชฏ เช›เซ‡ เชคเซ‡ เช…เชนเซ€เช‚ เช›เซ‡:

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

เช†เช–เชฐเซ‡, เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เชคเชฎเชพเชฎ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹ (เช•เซเชฐเซ‹เชจ เชฆเซเชตเชพเชฐเชพ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชฏ เช›เซ‡ เช…เชฅเชตเชพ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฆเซเชตเชพเชฐเชพ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡) เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒ เช•เชพเชฐเซเชฏเชฎเชพเช‚ เชชเชธเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชธเช‚เชชเชพเชฆเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช•เซเชฐเซ‰เชจเซเชŸเชพเชฌ VISUAL เช…เชฅเชตเชพ EDITOR เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒเชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชเชกเชฟเชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เชœเซ‹ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชœเซเชฏเชพเช‚ เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚ เชคเซเชฏเชพเช‚ เช† เชšเชฒเซ‹เชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซเชฏเชพ เชจเชฅเซ€, เชคเซ‹ เชชเช›เซ€ "/usr/ucb/vi" เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡ (เชฏเซเชธเซ€เชฌเซ€ เช•เชฆเชพเชš เชฏเซเชจเชฟเชตเชฐเซเชธเชฟเชŸเซ€ เช“เชซ เช•เซ‡เชฒเชฟเชซเซ‹เชฐเซเชจเชฟเชฏเชพ, เชฌเชฐเซเช•เชฒเซ‡ เช›เซ‡).

เชกเซ‡เชฌเชฟเชฏเชจ เช…เชจเซ‡ เช‰เชฌเซเชจเซเชŸเซ เชชเชฐ เช•เซเชฐเซ‹เชจ

เชกเซ‡เชฌเชฟเชฏเชจ เช…เชจเซ‡ เชกเซ‡เชฐเชฟเชตเซ‡เชŸเชฟเชต เชกเชฟเชธเซเชŸเซเชฐเชฟเชฌเซเชฏเซเชถเชจเชจเชพ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“เช เชฐเชฟเชฒเซ€เช เช•เชฐเซเชฏเซเช‚ เช›เซ‡ เช…เชคเซเชฏเช‚เชค เชธเช‚เชถเซ‹เชงเชฟเชค เชธเช‚เชธเซเช•เชฐเชฃ เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจ เชธเช‚เชธเซเช•เชฐเชฃ 3.0pl1. เช•เซ‹เชทเซเชŸเช• เชซเชพเช‡เชฒเซ‹เชจเชพ เชธเชฟเชจเซเชŸเซ‡เช•เซเชธเชฎเชพเช‚ เช•เซ‹เชˆ เชคเชซเชพเชตเชค เชจเชฅเซ€; เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡ เชคเซ‡ เชธเชฎเชพเชจ เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจ เช›เซ‡. เชธเซŒเชฅเซ€ เชฎเซ‹เชŸเซ€ เชจเชตเซ€ เชธเซเชตเชฟเชงเชพ: เชธเชชเซ‹เชฐเซเชŸ syslog, SELinux ะธ PAM.

เช“เช›เชพ เชงเซเชฏเชพเชจเชชเชพเชคเซเชฐ, เชชเชฐเช‚เชคเซ เชฎเซ‚เชฐเซเชค เชซเซ‡เชฐเชซเชพเชฐเซ‹เชฎเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเซ‹ เช…เชจเซ‡ เช•เชพเชฐเซเชฏ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซเช‚ เชธเซเชฅเชพเชจ เชถเชพเชฎเซ‡เชฒ เช›เซ‡.

เชกเซ‡เชฌเชฟเชฏเชจเชฎเชพเช‚ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช•เซ‹เชทเซเชŸเช•เซ‹ /var/spool/cron/crontabs เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชธเซเชฅเชฟเชค เช›เซ‡, เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชทเซเชŸเช• เชนเชœเซ€ เชชเชฃ เช›เซ‡ - /etc/crontab เชฎเชพเช‚. เชกเซ‡เชฌเชฟเชฏเชจ เชชเซ‡เช•เซ‡เชœ-เชตเชฟเชถเชฟเชทเซเชŸ เช•เชพเชฐเซเชฏ เช•เซ‹เชทเซเชŸเช•เซ‹ /etc/cron.d เชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซเชฏเชพเช‚เชฅเซ€ เช•เซเชฐเซ‹เชจ เชกเชฟเชฎเชจ เชคเซ‡เชฎเชจเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เชตเชพเช‚เชšเซ‡ เช›เซ‡. เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชเช•เซเชธเซ‡เชธ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ /etc/cron.allow เช…เชจเซ‡ /etc/cron.deny เชซเชพเช‡เชฒเซ‹ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เชฅเชพเชฏ เช›เซ‡.

เชกเชฟเชซเซ‰เชฒเซเชŸ เชถเซ‡เชฒ เชนเชœเซ เชชเชฃ /bin/sh เช›เซ‡, เชœเซ‡ เชกเซ‡เชฌเชฟเชฏเชจเชฎเชพเช‚ เชเช• เชจเชพเชจเซ‹ POSIX- เชธเซเชธเช‚เช—เชค เชถเซ‡เชฒ เช›เซ‡ เช†เชกเช‚เชฌเชฐ, เช•เซ‹เชˆเชชเชฃ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ (เชฌเชฟเชจ-เช‡เชจเซเชŸเชฐเซ‡เช•เซเชŸเชฟเชต เชฎเซ‹เชกเชฎเชพเช‚) เชตเชพเช‚เชšเซเชฏเชพ เชตเชฟเชจเชพ เชฒเซ‹เชจเซเชš เช•เชฐเซเชฏเซเช‚.

เชกเซ‡เชฌเชฟเชฏเชจเชจเชพ เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชฎเชพเช‚ เช•เซเชฐเซ‹เชจ เชชเซ‹เชคเซ‡ systemd เชฆเซเชตเชพเชฐเชพ เชฒเซ‹เชจเซเชš เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชฒเซ‹เชจเซเชš เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ /lib/systemd/system/cron.service เชฎเชพเช‚ เชœเซ‹เชˆ เชถเช•เชพเชฏ เช›เซ‡. เชธเซ‡เชตเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชฎเชพเช‚ เชตเชฟเชถเซ‡เชท เช•เช‚เชˆ เชจเชฅเซ€; เช•เซ‹เชˆเชชเชฃ เชตเชงเซ เชธเซ‚เช•เซเชทเซเชฎ เช•เชพเชฐเซเชฏ เชตเซเชฏเชตเชธเซเชฅเชพเชชเชจ เชฆเชฐเซ‡เช• เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพ เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌเชฎเชพเช‚ เชธเซ€เชงเชพ เชœเชพเชนเซ‡เชฐ เช•เชฐเชพเชฏเซ‡เชฒ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒ เชฆเซเชตเชพเชฐเชพ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

RedHat, Fedora เช…เชจเซ‡ CentOS เชชเชฐ cronie

เช•เซเชฐเซ‹เชจเซ€ โ€” เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจ เชธเช‚เชธเซเช•เชฐเชฃ 4.1 เชจเซ‹ เชซเซ‹เชฐเซเช•. เชกเซ‡เชฌเชฟเชฏเชจเชจเซ€ เชœเซ‡เชฎ, เชตเชพเช•เซเชฏเชฐเชšเชจเชพ เชฌเชฆเชฒเชพเชˆ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ PAM เช…เชจเซ‡ SELinux เชฎเชพเชŸเซ‡ เชธเชชเซ‹เชฐเซเชŸ, เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เช•เชพเชฎ เช•เชฐเชตเซเช‚, inotify เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชซเชพเชˆเชฒเซ‹ เชŸเซเชฐเซ‡เช•เชฟเช‚เช— เช…เชจเซ‡ เช…เชจเซเชฏ เชธเซเชตเชฟเชงเชพเช“ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡.

เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชธเชพเชฎเชพเชจเซเชฏ เชธเซเชฅเชณเซ‹เช เช›เซ‡: เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชทเซเชŸเช• /etc/crontab เชฎเชพเช‚ เช›เซ‡, เชชเซ‡เช•เซ‡เชœเซ‹ เชคเซ‡เชฎเชจเชพ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซ‡ /etc/cron.d เชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡, เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช•เซ‹เชทเซเชŸเช•เซ‹ /var/spool/cron/crontabs เชฎเชพเช‚ เชœเชพเชฏ เช›เซ‡.

เชกเชฟเชฎเชจ systemd เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชนเซ‡เช เชณ เชšเชพเชฒเซ‡ เช›เซ‡, เชธเซ‡เชตเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ /lib/systemd/system/crond.service เช›เซ‡.

Red Hat-เชœเซ‡เชตเชพ เชตเชฟเชคเชฐเชฃเซ‹ เชชเชฐ, /bin/sh เช เชธเซเชŸเชพเชฐเซเชŸเช…เชช เชชเชฐ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชตเชชเชฐเชพเชฏ เช›เซ‡, เชœเซ‡ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชฌเซ‡เชถ เช›เซ‡. เช เชจเซ‹เช‚เชงเชตเซเช‚ เชœเซ‹เชˆเช เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ /bin/sh เชฆเซเชตเชพเชฐเชพ เช•เซเชฐเซ‹เชจ เชœเซ‹เชฌเซเชธ เชšเชฒเชพเชตเซ€ เชฐเชนเซเชฏเชพ เชนเซ‹เชฏ, เชคเซเชฏเชพเชฐเซ‡ เชฌเซ‡เชถ เชถเซ‡เชฒ POSIX- เชธเซเชธเช‚เช—เชค เชฎเซ‹เชกเชฎเชพเช‚ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชฌเชฟเชจ-เชˆเชจเซเชŸเชฐเซ‡เช•เซเชŸเชฟเชต เชฎเซ‹เชกเชฎเชพเช‚ เชšเชพเชฒเชคเชพ เช•เซ‹เชˆเชชเชฃ เชตเชงเชพเชฐเชพเชจเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‡ เชตเชพเช‚เชšเชคเซเช‚ เชจเชฅเซ€.

SLES เช…เชจเซ‡ openSUSE เชฎเชพเช‚ เช•เซเชฐเซ‹เชจเซ€

เชœเชฐเซเชฎเชจ เชกเชฟเชธเซเชŸเซเชฐเชฟเชฌเซเชฏเซเชถเชจ SLES เช…เชจเซ‡ เชคเซ‡เชจเชพ เชกเซ‡เชฐเชฟเชตเซ‡เชŸเชฟเชต openSUSE เชธเชฎเชพเชจ เช•เซเชฐเซ‹เชจเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เช…เชนเซ€เช‚ เชกเชฟเชฎเชจ เชชเชฃ systemd เชนเซ‡เช เชณ เชฒเซ‹เชจเซเชš เชฅเชฏเซ‡เชฒ เช›เซ‡, เชธเซ‡เชตเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ /usr/lib/systemd/system/cron.service เชฎเชพเช‚ เชธเซเชฅเชฟเชค เช›เซ‡. เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ: /etc/crontab, /etc/cron.d, /var/spool/cron/tabs. /bin/sh เช เชœ เชฌเซ‡เชถ เช›เซ‡ เชœเซ‡ POSIX- เชธเซเชธเช‚เช—เชค เชฌเชฟเชจ-เช‡เชจเซเชŸเชฐเซ‡เช•เซเชŸเชฟเชต เชฎเซ‹เชกเชฎเชพเช‚ เชšเชพเชฒเซ‡ เช›เซ‡.

เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจ เช‰เชชเช•เชฐเชฃ

เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจเชจเซ€ เชธเชฐเช–เชพเชฎเชฃเซ€เชฎเชพเช‚ เช•เซเชฐเซ‹เชจเชจเชพ เช†เชงเซเชจเชฟเช• เชตเช‚เชถเชœเซ‹ เชงเชฐเชฎเซ‚เชณเชฅเซ€ เชฌเชฆเชฒเชพเชฏเชพ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡เชฎ เช›เชคเชพเช‚ เชจเชตเซ€ เชธเซเชตเชฟเชงเชพเช“ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เช›เซ‡ เชœเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเชพ เชธเชฟเชฆเซเชงเชพเช‚เชคเซ‹เชจเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€. เช†เชฎเชพเช‚เชจเชพ เช˜เชฃเชพ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เช–เชฐเชพเชฌ เชฐเซ€เชคเซ‡ เชกเชฟเชเชพเช‡เชจ เช•เชฐเซ‡เชฒเชพ เช›เซ‡ เช…เชจเซ‡ เช•เซ‹เชกเชจเซ‡ เช—เซ‚เช‚เชšเชตเชฃเชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡. เชชเซ‹เชฒ เชตเชฟเช•เซเชธเซ€เชจเซ‹ เชฎเซ‚เชณ เช•เซเชฐเซ‹เชจ เชธเซ‹เชฐเซเชธ เช•เซ‹เชก เชตเชพเช‚เชšเซ€เชจเซ‡ เช†เชจเช‚เชฆ เชฅเชฏเซ‹.

เชคเซ‡เชฅเซ€, เชฎเซ‡เช‚ เชตเชฟเช•เชพเชธเชจเซ€ เชฌเช‚เชจเซ‡ เชถเชพเช–เชพเช“เชฎเชพเช‚ เชธเชพเชฎเชพเชจเซเชฏ เช•เซเชฐเซ‹เชจ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซเชฐเซ‹เชจ เช‰เชชเช•เชฐเชฃเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ - Vixie cron 3.0pl1. เชตเชพเช‚เชšเชจเชจเซ‡ เชœเชŸเชฟเชฒ เชฌเชจเชพเชตเชคเชพ ifdefs เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเซ€เชจเซ‡ เช…เชจเซ‡ เชจเชพเชจเซ€ เชตเชฟเช—เชคเซ‹เชจเซ‡ เช…เชตเช—เชฃเซ€เชจเซ‡ เชนเซเช‚ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเซ€เชถ.

เชฐเชพเช•เซเชทเชธเชจเชพ เช•เชพเชฐเซเชฏเชจเซ‡ เช˜เชฃเชพ เชคเชฌเช•เซเช•เชพเชฎเชพเช‚ เชตเชนเซ‡เช‚เชšเซ€ เชถเช•เชพเชฏ เช›เซ‡:

  1. เช•เชพเชฐเซเชฏเช•เซเชฐเชฎเชจเซ€ เชถเชฐเซ‚เช†เชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช.
  2. เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เช•เชพเชฐเซเชฏเซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชเช•เชคเซเชฐเชฟเชค เช…เชจเซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเซ€.
  3. เชฎเซเช–เซเชฏ เช•เซเชฐเซ‹เชจ เชฒเซ‚เชช เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡.
  4. เชเช• เช•เชพเชฐเซเชฏ เชถเชฐเซ‚ เช•เชฐเซ‹.

เชšเชพเชฒเซ‹ เชคเซ‡เชฎเชจเซ‡ เช•เซเชฐเชฎเชฎเชพเช‚ เชœเซ‹เชˆเช.

เช†เชฐเช‚เชญ

เชœเซเชฏเชพเชฐเซ‡ เชถเชฐเซ‚ เชฅเชพเชฏ, เชคเซเชฏเชพเชฐเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ€ เชฆเชฒเซ€เชฒเซ‹ เชคเชชเชพเชธเซเชฏเชพ เชชเช›เซ€, เช•เซเชฐเซ‹เชจ SIGCHLD เช…เชจเซ‡ SIGHUP เชธเชฟเช—เซเชจเชฒ เชนเซ‡เชจเซเชกเชฒเชฐเซเชธ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡ เช›เซ‡. เชชเซเชฐเชฅเชฎ เชฌเชพเชณเช• เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเชพ เชธเชฎเชพเชชเซเชคเชฟ เชตเชฟเชถเซ‡ เชฒเซ‹เช— เชเชจเซเชŸเซเชฐเซ€ เช•เชฐเซ‡ เช›เซ‡, เชฌเซ€เชœเซ‹ เชฒเซ‹เช— เชซเชพเช‡เชฒเชจเชพ เชซเชพเช‡เชฒ เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพเชจเซ‡ เชฌเช‚เชง เช•เชฐเซ‡ เช›เซ‡:

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

เช•เซเชฐเซ‹เชจ เชกเชฟเชฎเชจ เชนเช‚เชฎเซ‡เชถเชพ เชธเชฟเชธเซเชŸเชฎ เชชเชฐ เชเช•เชฒเชพ เชšเชพเชฒเซ‡ เช›เซ‡, เชฎเชพเชคเซเชฐ เชธเซเชชเชฐเชฏเซเชเชฐ เชคเชฐเซ€เช•เซ‡ เช…เชจเซ‡ เชฎเซเช–เซเชฏ เช•เซเชฐเซ‹เชจ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚เชฅเซ€. เชจเซ€เชšเซ‡เชจเชพ เช•เซ‰เชฒเซเชธ เชกเชฟเชฎเชจ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ€ 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);

เชชเช›เซ€ เช•เซเชฐเซ‹เชจ เชฎเซเช–เซเชฏ เช•เชพเชฐเซเชฏ เชšเช•เซเชฐ เชชเชฐ เช†เช—เชณ เชตเชงเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚, เช•เชพเชฐเซเชฏ เชธเซ‚เชšเชฟ เชฒเซ‹เชก เช•เชฐเชตเชพ เชชเชฐ เชเช• เชจเชœเชฐ เชจเชพเช–เชตเซ€ เชฏเซ‹เช—เซเชฏ เช›เซ‡.

เช•เชพเชฐเซเชฏ เชธเซ‚เชšเชฟ เชเช•เชคเซเชฐเชฟเชค เช…เชจเซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเซ€

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);
}

เชœเซ‡ เชชเช›เซ€ เชœเซ‚เชจเชพ เชกเซ‡เชŸเชพเชฌเซ‡เชเชจเซ‡ เชจเชตเชพ เชธเชพเชฅเซ‡ เชฌเชฆเชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เช‰เชชเชฐเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชฎเชพเช‚, process_crontab เชซเช‚เช•เซเชถเชจ เช•เซ‰เชฒ เชšเช•เชพเชธเซ‡ เช›เซ‡ เช•เซ‡ เชŸเซ‡เชฌเชฒ เชซเชพเช‡เชฒเชจเชพ เชจเชพเชฎ เชธเชพเชฅเซ‡ เชฎเซ‡เชณ เช–เชพเชคเซ‹ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡ (เชธเชฟเชตเชพเชฏ เช•เซ‡ เชคเซ‡ เชธเซเชชเชฐเชฏเซเชเชฐ เชนเซ‹เชฏ) เช…เชจเซ‡ เชชเช›เซ€ 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;
    }
}

เช…เชนเซ€เช‚, load_env / env_set เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชธเซ‡เชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เชซเซ‹เชฐเซเชฎ VAR=เชตเซ‡เชฒเซเชฏเซเชจเซ€ เชฐเซ‡เช–เชพเช“), เช…เชฅเชตเชพ load_entry เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชพเชฐเซเชฏ เชตเชฐเซเชฃเชจ เชตเชพเช‚เชšเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (* * * * * /path/to/exec).

เชฒเซ‹เชก_เชเชจเซเชŸเซเชฐเซ€ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชเชจเซเชŸเซเชฐเซ€ เชเชจเซเชŸเชฟเชŸเซ€ เช…เชฎเชพเชฐเซเช‚ เช•เชพเชฐเซเชฏ เช›เซ‡, เชœเซ‡ เช•เชพเชฐเซเชฏเซ‹เชจเซ€ เชธเชพเชฎเชพเชจเซเชฏ เชธเซ‚เชšเชฟเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชซเช‚เช•เซเชถเชจ เชชเซ‹เชคเซ‡ เชœ เชŸเชพเชˆเชฎ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชจเซเช‚ เชตเชฐเซเชฌเซ‹เช เชชเชพเชฐเซเชธเชฟเช‚เช— เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชฎเชจเซ‡ เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸ เชตเซ‡เชฐเชฟเชฏเซ‡เชฌเชฒเซเชธ เช…เชจเซ‡ เชŸเชพเชธเซเช• เชฒเซ‹เชจเซเชš เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเซเชธเชจเซ€ เชฐเชšเชจเชพเชฎเชพเช‚ เชตเชงเซ เชฐเชธ เช›เซ‡:

/* ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŒ ะธ ะณั€ัƒะฟะฟะฐ ะดะปั ะทะฐะฟัƒัะบะฐ ะทะฐะดะฐั‡ะธ ะฑะตั€ัƒั‚ัั ะธะท 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 เชฎเชฟเชจเชฟเชŸ เชฎเชพเชŸเซ‡ เชธเซ‚เชˆ เชœเชพเชฏ เช›เซ‡. เช† เชฎเซ‹เชกเชฎเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชตเชพเช‚เชšเชตเชพ เช…เชจเซ‡ เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เชคเชชเชพเชธเชตเชพ เชฎเชพเชŸเซ‡ เช“เช›เชพ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹, เชชเชฐเช‚เชคเซ เช•เชพเชฐเซเชฏเซ‹เชจเซ€ เชธเซ‚เชšเชฟเชจเซ‡ เชเชกเชชเชฅเซ€ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเซ€ เช…เชธเซเชตเชฟเชงเชพเชœเชจเช• เชฌเชจเซ€ เชนเชคเซ€.

เชตเชฟเช•เซเชธเซ€ เช•เซเชฐเซ‹เชจ เชเช• เชฎเชฟเชจเชฟเชŸเชฎเชพเช‚ เชเช•เชตเชพเชฐ เช•เชพเชฐเซเชฏ เชธเซ‚เชšเชฟเช“ เชคเชชเชพเชธเชตเชพ เชชเชฐ เชชเชพเช›เซ‹ เชซเชฐเซเชฏเซ‹, เชธเชฆเชญเชพเช—เซเชฏเซ‡ 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;
}

เช•เซเชฐเซ‹เชจ_เชธเซเชฒเซ€เชช เชซเช‚เช•เซเชถเชจ เชธเซ€เชงเชพ เชœ เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เชธเชพเชฎเซ‡เชฒ เช›เซ‡, เชœเซ‹เชฌ_เชฐเชจเช•เซเชฏเซ‚ (เช•เชพเชฐเซเชฏเซ‹เชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเซ‹ เช…เชจเซ‡ เชšเชฒเชพเชตเซ‹) เช…เชจเซ‡ do_command (เชฆเชฐเซ‡เช• เชตเซเชฏเช•เซเชคเชฟเช—เชค เช•เชพเชฐเซเชฏ เชšเชฒเชพเชตเซ‹) เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซ‹. เช›เซ‡เชฒเซเชฒเซเช‚ เช•เชพเชฐเซเชฏ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชคเชชเชพเชธเชตเชพ เชฏเซ‹เช—เซเชฏ เช›เซ‡.

เช•เชพเชฐเซเชฏ เชšเชฒเชพเชตเชตเซเช‚

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;
}

เชคเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชคเชฎเชพเชฎ เช•เซเชฐเซ‹เชจ เช›เซ‡. เชฎเซ‡เช‚ เช•เซ‡เชŸเชฒเซ€เช• เชฐเชธเชชเซเชฐเชฆ เชตเชฟเช—เชคเซ‹ เช›เซ‹เชกเซ€ เชฆเซ€เชงเซ€ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฆเซ‚เชฐเชธเซเชฅ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡ เชเช•เชพเช‰เชจเซเชŸเชฟเช‚เช—, เชชเชฐเช‚เชคเซ เชฎเซ‡เช‚ เชฎเซเช–เซเชฏ เชตเชธเซเชคเซเชจเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เช†เชชเซ€ เช›เซ‡.

เช‰เชšเซเชšเชพเชฐเชฃ

เช•เซเชฐเซ‹เชจ เช เช†เชถเซเชšเชฐเซเชฏเชœเชจเช• เชฐเซ€เชคเซ‡ เชธเชฐเชณ เช…เชจเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช›เซ‡, เชœเซ‡ เชฏเซเชจเชฟเช•เซเชธ เชตเชฟเชถเซเชตเชจเซ€ เชถเซเชฐเซ‡เชทเซเช  เชชเชฐเช‚เชชเชฐเชพเช“เชฎเชพเช‚ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชคเซ‡เชฃเซ€ เช•เช‚เชˆเชชเชฃ เชตเชงเชพเชฐเชพเชจเซเช‚ เช•เชพเชฎ เช•เชฐเชคเซ€ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡ เช›เซ‡เชฒเซเชฒเชพ เช•เซ‡เชŸเชฒเชพเช• เชฆเชพเชฏเช•เชพเช“เชฅเซ€ เชคเซ‡เชจเซเช‚ เช•เชพเชฎ เช…เชฆเซเชญเซเชค เชฐเซ€เชคเซ‡ เช•เชฐเซ€ เชฐเชนเซ€ เช›เซ‡. เช‰เชฌเซเชจเซเชŸเซ เชธเชพเชฅเซ‡ เช†เชตเชคเชพ เชธเช‚เชธเซเช•เชฐเชฃ เชฎเชพเชŸเซ‡ เช•เซ‹เชก เชฎเซ‡เชณเชตเชตเชพเชฎเชพเช‚ เชเช• เช•เชฒเชพเช•เชฅเซ€ เชตเชงเซ เชธเชฎเชฏ เชฒเชพเช—เซเชฏเซ‹ เชจเชนเซ€เช‚, เช…เชจเซ‡ เชฎเชจเซ‡ เช–เซ‚เชฌ เชฎเชœเชพ เช†เชตเซ€! เชฎเชจเซ‡ เช†เชถเชพ เช›เซ‡ เช•เซ‡ เชนเซเช‚ เชคเซ‡เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชธเชพเชฅเซ‡ เชถเซ‡เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เชธเช•เซเชทเชฎ เชนเชคเซ‹.

เชนเซเช‚ เชคเชฎเชพเชฐเชพ เชตเชฟเชถเซ‡ เชœเชพเชฃเชคเซ‹ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชฎเชจเซ‡ เช เชœเชพเชฃเซ€เชจเซ‡ เชฅเซ‹เชกเซ‹ เชฆเซ:เช– เชฅเชพเชฏ เช›เซ‡ เช•เซ‡ เช†เชงเซเชจเชฟเช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช—, เชคเซ‡เชจเชพ เช…เชคเชฟ-เชœเชŸเชฟเชฒ เช…เชจเซ‡ เชตเชงเซ เชชเชกเชคเชพ เช…เชฎเซ‚เชฐเซเชคเชจเซ€ เชตเซƒเชคเซเชคเชฟ เชธเชพเชฅเซ‡, เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏเชฅเซ€ เช†เชตเซ€ เชธเชฐเชณเชคเชพ เชฎเชพเชŸเซ‡ เช…เชจเซเช•เซ‚เชณ เชจเชฅเซ€.

เช•เซเชฐเซ‹เชจ เชฎเชพเชŸเซ‡ เช˜เชฃเชพ เช†เชงเซเชจเชฟเช• เชตเชฟเช•เชฒเซเชชเซ‹ เช›เซ‡: systemd-เชŸเชพเชˆเชฎเชฐ เชคเชฎเชจเซ‡ เช…เชตเชฒเช‚เชฌเชจ เชธเชพเชฅเซ‡ เชœเชŸเชฟเชฒ เชธเชฟเชธเซเชŸเชฎเซ‹ เช—เซ‹เช เชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡, fcron เชคเชฎเชจเซ‡ เช•เชพเชฐเซเชฏเซ‹ เชฆเซเชตเชพเชฐเชพ เชธเช‚เชธเชพเชงเชจ เชตเชชเชฐเชพเชถเชจเซ‡ เชตเชงเซ เชฒเชตเชšเซ€เช• เชฐเซ€เชคเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชฐเซ€เชคเซ‡, เชธเซŒเชฅเซ€ เชธเชฐเชณ เช•เซเชฐเซ‹เชจเซเชŸเชพเชฌ เชนเช‚เชฎเซ‡เชถเชพ เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเซเช‚ เชนเชคเซเช‚.

เชŸเซ‚เช‚เช•เชฎเชพเช‚, เชฏเซเชจเชฟเช•เซเชธเชจเซ‡ เชชเซเชฐเซ‡เชฎ เช•เชฐเซ‹, เชธเชฐเชณ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช…เชจเซ‡ เชคเชฎเชพเชฐเชพ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชฎเชพเชŸเซ‡ เชฎเชจ เชตเชพเช‚เชšเชตเชพเชจเซเช‚ เชญเซ‚เชฒเชถเซ‹ เชจเชนเซ€เช‚!

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹