рд▓рд┐рдирдХреНрд╕рдордзреНрдпреЗ рдХреНрд░реЛрди: рдЗрддрд┐рд╣рд╛рд╕, рд╡рд╛рдкрд░ рдЖрдгрд┐ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕

рд▓рд┐рдирдХреНрд╕рдордзреНрдпреЗ рдХреНрд░реЛрди: рдЗрддрд┐рд╣рд╛рд╕, рд╡рд╛рдкрд░ рдЖрдгрд┐ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕

рдХреНрд▓рд╛рд╕рд┐рдХрдиреЗ рд▓рд┐рд╣рд┐рд▓реЗ рдХреА рдЖрдирдВрджреА рддрд╛рд╕ рдкрд╣рд╛рдд рдирд╛рд╣реАрдд. рддреНрдпрд╛ рдЬрдВрдЧрд▓реА рдХрд╛рд│рд╛рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд┐рдВрд╡рд╛ рдпреБрдирд┐рдХреНрд╕ рдирд╡реНрд╣рддреЗ, рдкрд░рдВрддреБ рдЖрдЬ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рддрдкрдгреЗ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ: рдХреНрд░реЙрди рддреНрдпрд╛рдВрдЪреНрдпрд╛рдРрд╡рдЬреА рд╡реЗрд│реЗрдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдареЗрд╡реЗрд▓.

рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдпреБрдЯрд┐рд▓рд┐рдЯрд┐рдЬ рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдХрдордХреБрд╡рддрдкрдгрд╛ рдЖрдгрд┐ рдХрд╛рдо рдЖрд╣реЗ. sed, awk, wc, cut рдЖрдгрд┐ рдЗрддрд░ рдЬреБрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдордЪреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рджрд░рд░реЛрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯрджреНрд╡рд╛рд░реЗ рдЪрд╛рд▓рд╡рд▓реЗ рдЬрд╛рддрд╛рдд. рддреНрдпрд╛рдкреИрдХреА рдмрд░реЗрдЪ рдХреНрд░реЙрдирд╕рд╛рдареА рдХрд╛рд░реНрдп рдореНрд╣рдгреВрди рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗ рдЖрд╣реЗрдд, рдореВрд│рддрдГ 70 рдЪреНрдпрд╛ рджрд╢рдХрд╛рддреАрд▓ рд╢реЗрдбреНрдпреВрд▓рд░.

рдмрд░реНтАНрдпрд╛рдЪ рдХрд╛рд│рд╛рд╕рд╛рдареА рдореА рддрдкрд╢реАрд▓рд╛рдд рди рдЬрд╛рддрд╛, рд╡рд░рд╡рд░рдЪреНрдпрд╛ рдХреНрд░реЙрдирдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛, рдкрд░рдВрддреБ рдПрдХреЗ рджрд┐рд╡рд╢реА, рдЬреЗрд╡реНрд╣рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рддрд╛рдирд╛ рдорд▓рд╛ рддреНрд░реБрдЯреА рдЖрд▓реА, рддреЗрд╡реНрд╣рд╛ рдореА рддреНрдпрд╛рдХрдбреЗ рдкреВрд░реНрдгрдкрдгреЗ рд▓рдХреНрд╖ рджреЗрдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛. рд╣рд╛ рд▓реЗрдЦ рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ рджрд┐рд╕рд▓рд╛, рддреЛ рд▓рд┐рд╣рд┐рддрд╛рдирд╛ рдорд▓рд╛ POSIX рдХреНрд░реЙрдиреНрдЯреЕрдм, рд▓реЛрдХрдкреНрд░рд┐рдп рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдгрд╛рддреАрд▓ рдореБрдЦреНрдп рдХреНрд░реЙрди рдкрд░реНрдпрд╛рдп рдЖрдгрд┐ рддреНрдпрд╛рддреАрд▓ рдХрд╛рд╣реАрдВрдЪреНрдпрд╛ рд╕рдВрд░рдЪрдиреЗрдЪреА рдУрд│рдЦ рдЭрд╛рд▓реА.

рддреБрдореНрд╣реА рд▓рд┐рдирдХреНрд╕ рд╡рд╛рдкрд░рдд рдЖрд╣рд╛рдд рдЖрдгрд┐ рдХреНрд░реЙрди рдЯрд╛рд╕реНрдХ рдЪрд╛рд▓рд╡рдд рдЖрд╣рд╛рдд? рддреБрдореНрд╣рд╛рд▓рд╛ рдпреБрдирд┐рдХреНрд╕рдордзреАрд▓ рд╕рд┐рд╕реНрдЯрдо рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреНрдпреЗ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЖрд╣реЗ рдХрд╛? рдордЧ рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдорд╛рд░реНрдЧрд╛рд╡рд░ рдЖрд╣реЛрдд!

рд╕рд╛рдордЧреНрд░реА

рдкреНрд░рдЬрд╛рддреАрдВрдЪреЗ рдореВрд│

рд╕рд░реНрд╡ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯреАрдордордзреНрдпреЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдХрд┐рдВрд╡рд╛ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕рдЪреА рдирд┐рдпрддрдХрд╛рд▓рд┐рдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╣реА рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЧрд░рдЬ рдЖрд╣реЗ. рдореНрд╣рдгреВрди, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рдирд╛ рдЕрд╢рд╛ рд╕реЗрд╡рд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЬрд╛рдгрд╡рд▓реА рдЬреА рддреНрдпрд╛рдВрдирд╛ рдордзреНрдпрд╡рд░реНрддреА рдпреЛрдЬрдирд╛ рдЖрдгрд┐ рдХрд╛рд░реНрдпреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддрд╛рдд.

рдпреБрдирд┐рдХреНрд╕ рд╕рд╛рд░рдЦреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯреАрдо рддреНрдпрд╛рдВрдЪреА рдЙрддреНрдкрддреНрддреА рдЖрд╡реГрддреНрддреА 7 рдпреБрдирд┐рдХреНрд╕ рдкрд░реНрдпрдВрдд рд╢реЛрдзреВрди рдХрд╛рдврддрд╛рдд, рдЧреЗрд▓реНрдпрд╛ рд╢рддрдХрд╛рдЪреНрдпрд╛ 70 рдЪреНрдпрд╛ рджрд╢рдХрд╛рдд рдмреЗрд▓ рд▓реЕрдмрдордзреНрдпреЗ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реА рдЧреЗрд▓реА рд╣реЛрддреА, рдЬреНрдпрд╛рдд рдкреНрд░рд╕рд┐рджреНрдз рдХреЗрди рдереЙрдореНрдкрд╕рди рдпрд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ. рдЖрд╡реГрддреНрддреА 7 рдпреБрдирд┐рдХреНрд╕рдордзреНрдпреЗ рдХреНрд░реЙрди рджреЗрдЦреАрд▓ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ, рдЬреА рд╕реБрдкрд░рдпреБрдЬрд░ рдЯрд╛рд╕реНрдХ рдирд┐рдпрдорд┐рддрдкрдгреЗ рдЪрд╛рд▓рд╡рдгрд╛рд░реА рд╕реЗрд╡рд╛ рдЖрд╣реЗ.

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЖрдзреБрдирд┐рдХ рдХреНрд░реЙрди рд╣рд╛ рдПрдХ рд╕рд╛рдзрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрд╣реЗ, рдкрд░рдВрддреБ рдореВрд│ рдЖрд╡реГрддреНрддреАрдЪрд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЖрдгрдЦреА рд╕реЛрдкрд╛ рд╣реЛрддрд╛: рд╕реЗрд╡рд╛ рдорд┐рдирд┐рдЯрд╛рддреВрди рдПрдХрджрд╛ рдЙрдарддреЗ, рдПрдХрд╛рдЪ рдлрд╛рдИрд▓рдордзреАрд▓ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╣ рдЯреЗрдмрд▓ рд╡рд╛рдЪрддреЗ (/etc/lib/crontab) рдЖрдгрд┐ рддреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рд╕реБрдкрд░рдпреБрдЬрд░ рддреА рдХрд╛рд░реНрдпреЗ рдЬреА рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдХреНрд╖рдгреА рдХреЗрд▓реА рдЬрд╛рд╡реАрдд.

рддреНрдпрд╛рдирдВрддрд░, рд╕рд░реНрд╡ рдпреБрдирд┐рдХреНрд╕ рд╕рд╛рд░рдЦреНрдпрд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯреАрдорд╕рд╣ рд╕рд╛рдзреНрдпрд╛ рдЖрдгрд┐ рдЙрдкрдпреБрдХреНрдд рд╕реЗрд╡реЗрдЪреНрдпрд╛ рд╕реБрдзрд╛рд░рд┐рдд рдЖрд╡реГрддреНрддреНрдпрд╛ рдкреБрд░рд╡рд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛.

рдХреНрд░реЙрдиреНрдЯреЕрдм рдлреЙрд░рдореЕрдЯрдЪреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡рд░реНрдгрди рдЖрдгрд┐ рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЪреНрдпрд╛ рдСрдкрд░реЗрд╢рдирдЪреА рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ 1992 рдордзреНрдпреЗ рдпреБрдирд┐рдХреНрд╕-рд╕рджреГрд╢ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдордЪреНрдпрд╛ рдореБрдЦреНрдп рдорд╛рдирдХ - POSIX - рдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрдгрд┐ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдбреА рдлреЕрдХреНрдЯреЛ рд╕реНрдЯрдБрдбрд░реНрдбрдордзреВрди рдХреНрд░реЙрди рдПрдХ рдбреА рдЬреНрдпреБрдЕрд░ рдорд╛рдирдХ рдмрдирд▓реЗ.

1987 рдордзреНрдпреЗ, рдкреЙрд▓ рд╡рд┐рдХреНрд╕реА, рдпреБрдирд┐рдХреНрд╕ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреЗ рдХреНрд░реЙрдирд╕рд╛рдареА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЗрдЪреНрдЫреЗрдмрджреНрджрд▓ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдХрд░реВрди, рдбрд┐рдордирдЪреА рджреБрд╕рд░реА рдЖрд╡реГрддреНрддреА рдЬрд╛рд░реА рдХреЗрд▓реА рдЬреНрдпрд╛рдиреЗ рдкрд╛рд░рдВрдкрд╛рд░рд┐рдХ рдХреНрд░реЙрдирдЪреНрдпрд╛ рдХрд╛рд╣реА рд╕рдорд╕реНрдпрд╛ рджреБрд░реБрд╕реНрдд рдХреЗрд▓реНрдпрд╛ рдЖрдгрд┐ рдЯреЗрдмрд▓ рдлрд╛рдЗрд▓реНрд╕рдЪреА рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рд╡рд┐рд╕реНрддреГрдд рдХреЗрд▓реА.

Vixie cron рдЪреНрдпрд╛ рддрд┐рд╕рд▒реНрдпрд╛ рдЖрд╡реГрддреНрддреАрдиреЗ POSIX рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА, рддреНрдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдкреНрд░реЛрдЧреНрд░рд╛рдорд▓рд╛ рдЙрджрд╛рд░рдорддрд╡рд╛рджреА рдкрд░рд╡рд╛рдирд╛ рд╣реЛрддрд╛, рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдРрд╡рдЬреА README рдордзреАрд▓ рдЗрдЪреНрдЫрд╛ рд╡рдЧрд│рддрд╛ рдХреЛрдгрддрд╛рд╣реА рдкрд░рд╡рд╛рдирд╛ рдирд╡реНрд╣рддрд╛: рд▓реЗрдЦрдХ рд╣рдореА рджреЗрдд тАЛтАЛтАЛтАЛрдирд╛рд╣реА, рд▓реЗрдЦрдХрд╛рдЪреЗ рдирд╛рд╡ рд╣рдЯрд╡рд┐рд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА, рдЖрдгрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрдХреНрдд рд╕реНрддреНрд░реЛрдд рдХреЛрдбрд╕рд╣ рд╡рд┐рдХрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдлреНрд░реА рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░рдЪреНрдпрд╛ рддрддреНрддреНрд╡рд╛рдВрд╢реА рд╕реБрд╕рдВрдЧрдд рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдЬреЗ рддреНрдпрд╛ рд╡рд░реНрд╖рд╛рдВрдордзреНрдпреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛрдд рд╣реЛрддреЗ, рдореНрд╣рдгреВрди 90 рдЪреНрдпрд╛ рджрд╢рдХрд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд╕ рджрд┐рд╕рдгрд╛рд░реНтАНрдпрд╛ рдХрд╛рд╣реА рдкреНрд░рдореБрдЦ Linux рд╡рд┐рддрд░рдгрд╛рдВрдиреА Vixie рдХреНрд░реЙрдирд▓рд╛ рддреНрдпрд╛рдВрдЪреА рдкреНрд░рдгрд╛рд▓реА рдореНрд╣рдгреВрди рдШреЗрддрд▓реЗ рдЖрдгрд┐ рдЖрдЬрд╣реА рддреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдд рдЖрд╣реЗрдд.

рд╡рд┐рд╢реЗрд╖рддрдГ, Red Hat рдЖрдгрд┐ SUSE рдиреЗ Vixie cron - cronie рдЪрд╛ рдПрдХ рдХрд╛рдЯрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓рд╛ рдЖрдгрд┐ рдбреЗрдмрд┐рдпрди рдЖрдгрд┐ Ubuntu рдЕрдиреЗрдХ рдкреЕрдЪрд╕рд╣ Vixie cron рдЪреА рдореВрд│ рдЖрд╡реГрддреНрддреА рд╡рд╛рдкрд░рддрд╛рдд.

рдЪрд▓рд╛ рдкреНрд░рдердо POSIX рдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдпреБрдЯрд┐рд▓рд┐рдЯреА рдХреНрд░реЙрдиреНрдЯреЕрдмрд╢реА рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдК рдпрд╛, рддреНрдпрд╛рдирдВрддрд░ рдЖрдкрдг рд╡рд┐рдХреНрд╕реА рдХреНрд░реЙрдирдордзреНрдпреЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реЗ рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЖрдгрд┐ рд▓реЛрдХрдкреНрд░рд┐рдп рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдгрд╛рдВрдордзреНрдпреЗ рд╡рд┐рдХреНрд╕реА рдХреНрд░реЙрдирдЪреНрдпрд╛ рднрд┐рдиреНрдирддреЗрдЪрд╛ рд╡рд╛рдкрд░ рдкрд╛рд╣реВ. рдЖрдгрд┐ рд╢реЗрд╡рдЯреА, рдХреЗрдХрд╡рд░реАрд▓ рдЪреЗрд░реА рдХреНрд░реЙрди рдбрд┐рдорди рдЙрдкрдХрд░рдгрд╛рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЖрд╣реЗ.

POSIX рдХреНрд░реЙрдиреНрдЯреЕрдм

рдЬрд░ рдореВрд│ рдХреНрд░реЙрди рдиреЗрд╣рдореА рд╕реБрдкрд░рдпреБрдЬрд░рд╕рд╛рдареА рдХрд╛рдо рдХрд░рдд рдЕрд╕реЗрд▓, рддрд░ рдЖрдзреБрдирд┐рдХ рд╢реЗрдбреНрдпреБрд▓рд░ рд╕рд╣рд╕рд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдВрдирд╛ рд╕рд╛рдореЛрд░реЗ рдЬрд╛рддрд╛рдд, рдЬреЗ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдЖрдгрд┐ рд╕реЛрдпреАрд╕реНрдХрд░ рдЕрд╕рддрд╛рдд.

рдХреНрд░реЙрдиреНрд╕ рджреЛрди рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕рдЪреНрдпрд╛ рд╕рдВрдЪрд╛рдЪреНрдпрд╛ рд░реВрдкрд╛рдд рдкреБрд░рд╡рд▓реЗ рдЬрд╛рддрд╛рдд: рд╕рддрдд рдЪрд╛рд▓реВ рдЕрд╕рд▓реЗрд▓реЗ рдХреНрд░реЙрди рдбрд┐рдорди рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдХреНрд░реЙрдирдЯреЕрдм рдЙрдкрдпреБрдХреНрддрддрд╛. рдирдВрддрд░рдЪреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд┐рд╕реНрдЯрдордордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓реНрд╕ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ, рддрд░ рдбрд┐рдорди рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЖрдгрд┐ рд╕рд┐рд╕реНрдЯрдо рдЯреЗрдмрд▓рдордзреВрди рдХрд╛рд░реНрдпреЗ рд▓рд╛рдБрдЪ рдХрд░рддреЗ.

╨Т POSIX рдорд╛рдирдХ рдбрд┐рдордирдЪреНрдпрд╛ рд╡рд░реНрддрдирд╛рдЪреЗ рд╡рд░реНрдгрди рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдХрд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рдд рдирд╛рд╣реА рдЖрдгрд┐ рдХреЗрд╡рд│ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрдкрдЪрд╛рд░рд┐рдХ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдХреНрд░реЙрдиреНрдЯрд╛рдм. рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЗ рд▓рд╛рдБрдЪ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдпрдВрддреНрд░рдгреЗрдЪреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдЕрд░реНрдерд╛рддрдЪ рдирд┐рд╣рд┐рдд рдЖрд╣реЗ, рдкрд░рдВрддреБ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реА.

рдХреНрд░реЙрдиреНрдЯреЕрдм рдпреБрдЯрд┐рд▓рд┐рдЯреАрд▓рд╛ рдХреЙрд▓ рдХрд░реВрди, рддреБрдореНрд╣реА рдЪрд╛рд░ рдЧреЛрд╖реНрдЯреА рдХрд░реВ рд╢рдХрддрд╛: рдПрдбрд┐рдЯрд░рдордзреНрдпреЗ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреЗ рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рд╛, рдлрд╛рдЗрд▓рдордзреВрди рдЯреЗрдмрд▓ рд▓реЛрдб рдХрд░рд╛, рд╕рдзреНрдпрд╛рдЪреЗ рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓ рджрд╛рдЦрд╡рд╛ рдЖрдгрд┐ рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓ рд╕рд╛рдл рдХрд░рд╛. рдХреНрд░реЙрдиреНрдЯреЕрдм рдпреБрдЯрд┐рд▓рд┐рдЯреА рдХрд╢реА рдХрд╛рд░реНрдп рдХрд░рддреЗ рдпрд╛рдЪреА рдЙрджрд╛рд╣рд░рдгреЗ:

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. HOME - рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреА рд╣реЛрдо рдбрд┐рд░реЗрдХреНрдЯрд░реА.
  2. LOGNAME тАФ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рди.
  3. PATH рд╣рд╛ рдПрдХ рдорд╛рд░реНрдЧ рдЖрд╣реЗ рдЬрд┐рдереЗ рддреБрдореНрд╣реА рдорд╛рдирдХ рдкреНрд░рдгрд╛рд▓реА рдЙрдкрдпреБрдХреНрддрддрд╛ рд╢реЛрдзреВ рд╢рдХрддрд╛.
  4. рд╢реЗрд▓ - рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рдХрдорд╛рдВрдб рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░рдЪрд╛ рдорд╛рд░реНрдЧ.

рд╡рд┐рд╢реЗрд╖ рдореНрд╣рдгрдЬреЗ, рдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪреА рдореВрд▓реНрдпреЗ рдХреБрдареВрди рдпреЗрддрд╛рдд рдпрд╛рдмрджреНрджрд▓ POSIX рдХрд╛рд╣реАрд╣реА рд╕рд╛рдВрдЧрдд рдирд╛рд╣реА.

рдмреЗрд╕реНрдЯ рд╕реЗрд▓рд░ - рд╡рд┐рдХреНрд╕реА рдХреНрд░реЙрди 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 рдлрд╛рдЗрд▓реНрд╕рдордзреНрдпреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд, рдЬрд┐рдереЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдПрдХрд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдУрд│реАрдд рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдирд╛рд╡ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡рд╛рдХреНрдпрд░рдЪрдирд╛

рдкреЙрд╕рд┐рдХреНрд╕ рдХреНрд░реЙрдиреНрдЯреЕрдмрдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд, рдкреЙрд▓ рд╡рд┐рдХреНрд╕реАрдЪреНрдпрд╛ рд╕реЛрд▓реНрдпреВрд╢рдирдордзреНрдпреЗ рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЪреНрдпрд╛ рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓рдЪреНрдпрд╛ рд╡рд╛рдХреНрдпрд░рдЪрдирд╛рдордзреНрдпреЗ рдЕрдиреЗрдХ рдЕрддрд┐рд╢рдп рдЙрдкрдпреБрдХреНрдд рдмрджрд▓ рдЖрд╣реЗрдд.

рдПрдХ рдирд╡реАрди рд╕рд╛рд░рдгреА рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рдЙрдкрд▓рдмреНрдз рдЭрд╛рд▓реА рдЖрд╣реЗ: рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣реА рдЖрдард╡рдбреНрдпрд╛рдЪреЗ рджрд┐рд╡рд╕ рдХрд┐рдВрд╡рд╛ рдорд╣рд┐рдиреЗ рдирд╛рд╡рд╛рдиреЗ (рд╕реЛрдо, рдордВрдЧрд│, рдЖрдгрд┐ рдЕрд╕реЗ) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддрд╛:

# ╨Ч╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П ╨╡╨╢╨╡╨╝╨╕╨╜╤Г╤В╨╜╨╛ ╨┐╨╛ ╨┐╨╛╨╜╨╡╨┤╨╡╨╗╤М╨╜╨╕╨║╨░╨╝ ╨╕ ╨▓╤В╨╛╤А╨╜╨╕╨║╨░╨╝ ╨▓ ╤П╨╜╨▓╨░╤А╨╡
* * * 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 рд╣реА рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдлрдХреНрдд рдбрд┐рдордирджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реА рдирд╛рд╣реАрдд, рдкрд░рдВрддреБ рддреА рдлрд╛рдЗрд▓рдордзреВрди рдШреЗрддрд▓реА рдЖрд╣реЗрдд. рдкрд╛рд╕рд╡рд╛рдб. 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. рдЯреЗрдмрд▓ рдлрд╛рдЗрд▓реНрд╕рдЪреНрдпрд╛ рд╕рд┐рдВрдЯреЕрдХреНрд╕рдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА рдлрд░рдХ рдирд╛рд╣реАрдд; рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рддреЗ рд╕рдорд╛рди Vixie рдХреНрд░реЙрди рдЖрд╣реЗ. рд╕рд░реНрд╡рд╛рдд рдореЛрдареЗ рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдп: рд╕рдорд░реНрдерди syslog, SELinux ╨╕ рдкреАрдПрдПрдо.

рдХрдореА рд▓рдХреНрд╖рд╛рдд рдпреЗрдгреНрдпрд╛рдЬреЛрдЧреЗ, рдкрд░рдВрддреБ рдореВрд░реНрдд рдмрджрд▓рд╛рдВрдордзреНрдпреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕ рдЖрдгрд┐ рдХрд╛рд░реНрдп рд╕рд╛рд░рдгреНрдпрд╛рдВрдЪреЗ рд╕реНрдерд╛рди рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ.

рдбреЗрдмрд┐рдпрдирдордзреАрд▓ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕рд╛рд░рдгреНрдпрд╛ /var/sool/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

рдХреНрд░реЛрдиреА тАФ рд╡рд┐рдХреНрд╕реА рдХреНрд░реЙрди рдЖрд╡реГрддреНрддреА рек.рез рдЪрд╛ рдХрд╛рдЯрд╛. рдбреЗрдмрд┐рдпрди рдкреНрд░рдорд╛рдгреЗ, рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рдмрджрд▓рд▓реЗрд▓реА рдирд╛рд╣реА, рдкрд░рдВрддреБ 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 рдордзреНрдпреЗ cronie

рдЬрд░реНрдорди рд╡рд┐рддрд░рдг 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);

рдХреНрд░реЙрди рдбрд┐рдорди рдиреЗрд╣рдореА рд╕рд┐рд╕реНрдЯреАрдорд╡рд░ рдПрдХрдЯрд╛рдЪ рдЪрд╛рд▓рддреЛ, рдлрдХреНрдд рд╕реБрдкрд░рдпреБрдЬрд░ рдореНрд╣рдгреВрди рдЖрдгрд┐ рдореБрдЦреНрдп рдХреНрд░реЙрди рдбрд┐рд░реЗрдХреНрдЯреНрд░реАрдордзреВрди. рдЦрд╛рд▓реАрд▓ рдХреЙрд▓реНрд╕ рдбрд┐рдорди рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреНрдпрд╛ рдкреАрдЖрдпрдбреАрд╕рд╣ рдПрдХ рд▓реЙрдХ рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рддрд╛рдд, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдпреЛрдЧреНрдп рдЕрд╕рд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛ рдЖрдгрд┐ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрд▓рд╛ рдореБрдЦреНрдпрдордзреНрдпреЗ рдмрджрд▓рд╛:

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

рдкрд╛рд▓рдХ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреНрдпрд╛ рд╕рдорд╛рдкреНрддреАрдореБрд│реЗ рд▓реЙрдХ рдлрд╛рдЗрд▓рд╡рд░реАрд▓ рд▓реЙрдХ рд░рд┐рд▓реАрдЭ рд╣реЛрддреЛ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдлрд╛рдИрд▓рдордзреАрд▓ рдкреАрдЖрдпрдбреА рдореБрд▓рд╛рд▓рд╛ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпрд╛рдирдВрддрд░, рдЯрд╛рд╕реНрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рднрд░рд▓рд╛ рдЖрд╣реЗ:

/* ╨┐╨╛╨▓╤В╨╛╤А╨╜╤Л╨╣ ╨╖╨░╤Е╨▓╨░╤В ╨╗╨╛╨║╨░ */
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=value рдЪреНрдпрд╛ рдУрд│реА) рдХрд┐рдВрд╡рд╛ load_entry рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВрди рдЯрд╛рд╕реНрдХ рд╡рд░реНрдгрди рд╡рд╛рдЪрд▓реЗ рдЬрд╛рддреЗ (* * * * * /path/to/exec).

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

рдХреНрд░реЙрди_рд╕реНрд▓реАрдк рдлрдВрдХреНрд╢рди рдХрд╛рд░реНрдпреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рдд, job_runqueue (рдЧрдгрд┐рдд рдХрд░рд╛ рдЖрдгрд┐ рдХрд╛рд░реНрдпреЗ рдЪрд╛рд▓рд╡рд╛) рдЖрдгрд┐ 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;
}

рдореБрд│рд╛рдд рддреЗ рд╕рд░реНрд╡ рдХреНрд░реЙрди рдЖрд╣реЗ. рдореА рдХрд╛рд╣реА рдордиреЛрд░рдВрдЬрдХ рддрдкрд╢реАрд▓ рд╡рдЧрд│рд▓реЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд░рд┐рдореЛрдЯ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рд▓реЗрдЦрд╛рдВрдХрди, рдкрд░рдВрддреБ рдореА рдореБрдЦреНрдп рдЧреЛрд╖реНрдЯ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХреЗрд▓реА.

рдирдВрддрд░рдЪрд╛ рд╢рдмреНрдж

рдХреНрд░реЙрди рд╣рд╛ рдПрдХ рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХрдкрдгреЗ рд╕реЛрдкрд╛ рдЖрдгрд┐ рдЙрдкрдпреБрдХреНрдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрд╣реЗ, рдЬреЛ рдпреБрдирд┐рдХреНрд╕ рдЬрдЧрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░рдВрдкрд░рд╛рдВрдордзреНрдпреЗ рдмрдирд╡рд┐рд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ. рддреА рдХрд╛рд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд░рдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рддреА рдЧреЗрд▓реА рдЕрдиреЗрдХ рджрд╢рдХреЗ рддрд┐рдЪреЗ рдХрд╛рдо рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХрдкрдгреЗ рдХрд░рдд рдЖрд╣реЗ. рдЙрдмрдВрдЯреВрдЪреНрдпрд╛ рдЖрд╡реГрддреНрддреАрд╕рд╛рдареА рдХреЛрдб рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХрд╛ рддрд╛рд╕рд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡реЗрд│ рд▓рд╛рдЧрд▓рд╛ рдирд╛рд╣реА рдЖрдгрд┐ рдорд▓рд╛ рдЦреВрдк рдордЬрд╛ рдЖрд▓реА! рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рдореА рддреЗ рддреБрдордЪреНрдпрд╛рд╕реЛрдмрдд рд╢реЗрдЕрд░ рдХрд░реВ рд╢рдХрд▓реЛ.

рдорд▓рд╛ рддреБрдордЪреНрдпрд╛рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдирд╛рд╣реА, рдкрд░рдВрддреБ рдорд▓рд╛ рд╣реЗ рд╕рдордЬреВрди рдереЛрдбреЗ рд╡рд╛рдИрдЯ рд╡рд╛рдЯрддреЗ рдХреА рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, рддреНрдпрд╛рдЪреНрдпрд╛ рдЕрддрд┐-рдЬрдЯрд┐рд▓ рдЖрдгрд┐ рдЕрддрд┐-рдЕрдореВрд░реНрдд рдкреНрд░рд╡реГрддреНрддреАрд╕рд╣, рдмрд░реНрдпрд╛рдЪ рдХрд╛рд│рд╛рдкрд╛рд╕реВрди рдЕрд╢рд╛ рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА рдЕрдиреБрдХреВрд▓ рдирд╛рд╣реА.

рдХреНрд░реЙрдирд╕рд╛рдареА рдмрд░реЗрдЪ рдЖрдзреБрдирд┐рдХ рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд: рд╕рд┐рд╕реНрдЯрдордб-рдЯрд╛рдЗрдорд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡рд╛рдВрд╕рд╣ рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓реА рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ, fcron рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдВрджреНрд╡рд╛рд░реЗ рд╕рдВрд╕рд╛рдзрди рд╡рд╛рдкрд░рд╛рдЪреЗ рдЕрдзрд┐рдХ рд▓рд╡рдЪрд┐рдХрдкрдгреЗ рдирд┐рдпрдорди рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рдкрд░рдВрддреБ рд╡реИрдпрдХреНрддрд┐рдХрд░рд┐рддреНрдпрд╛, рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдХреНрд░реЙрдиреНрдЯреЕрдм рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдиреЗрд╣рдореАрдЪ рдкреБрд░реЗрд╕рд╛ рд╣реЛрддрд╛.

рдереЛрдбрдХреНрдпрд╛рдд, рдпреБрдирд┐рдХреНрд╕рд╡рд░ рдкреНрд░реЗрдо рдХрд░рд╛, рд╕рд╛рдзреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд╛рдкрд░рд╛ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╕рд╛рдареА рдорди рд╡рд╛рдЪрд╛рдпрд▓рд╛ рд╡рд┐рд╕рд░реВ рдирдХрд╛!

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛