рд▓рд┐рдирдХреНрд╕рдорд╛ рдХреНрд░реЛрди: рдЗрддрд┐рд╣рд╛рд╕, рдкреНрд░рдпреЛрдЧ рд░ рдЙрдкрдХрд░рдг

рд▓рд┐рдирдХреНрд╕рдорд╛ рдХреНрд░реЛрди: рдЗрддрд┐рд╣рд╛рд╕, рдкреНрд░рдпреЛрдЧ рд░ рдЙрдкрдХрд░рдг

рдХреНрд▓рд╛рд╕рд┐рдХрд▓реЗ рд▓реЗрдЦреЗ рдХрд┐ рдЦреБрд╢реАрдХреЛ рдШрдбреА рд╣реЗрд░реНрджреИрдиред рддреА рдЬрдВрдЧрд▓реА рд╕рдордпрдорд╛ рди рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВ рдерд┐рдП рди рдпреБрдирд┐рдХреНрд╕, рддрд░ рдЖрдЬ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрд▓рд╛рдИ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рдерд╛рд╣рд╛ рдЫ: рдХреНрд░реЛрдирд▓реЗ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдЯреНрдЯрд╛ рд╕рдордпрдХреЛ рдЯреНрд░рдпрд╛рдХ рд░рд╛рдЦреНрдиреЗрдЫред

рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ рджреБрдмреИ рдХрдордЬреЛрд░реА рд░ рдореЗрд░реЛ рд▓рд╛рдЧрд┐ рдХрд╛рдо рд╣реЛред sed, awk, wc, cut рд░ рдЕрдиреНрдп рдкреБрд░рд╛рдирд╛ рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ рд╣рд╛рдореНрд░реЛ рд╕рд░реНрднрд░рдорд╛ рд╣рд░реЗрдХ рджрд┐рди рд╕реНрдХреНрд░рд┐рдкреНрдЯрджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдЗрдиреНрдЫред рддрд┐рдиреАрд╣рд░реВ рдордзреНрдпреЗ рдзреЗрд░реИ рдХреНрд░реЛрди рдХреЛ рд▓рд╛рдЧрд┐ рдХрд╛рд░реНрдп рдХреЛ рд░реВрдк рдорд╛ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдЫ, рдПрдХ рд╢реЗрдбреНрдпреВрд▓рд░ рдореВрд▓ рд░реВрдк рджреЗрдЦрд┐ 70s рдХреЛред

рд▓рд╛рдореЛ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рдореИрд▓реЗ рд╡рд┐рд╡рд░рдгрд╣рд░реВрдорд╛ рдирдЬрд╛рдЗрдХрди рд╕рддрд╣реА рд░реВрдкрдорд╛ рдХреНрд░реЛрди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдВ, рддрд░ рдПрдХ рджрд┐рди, рдЬрдм рдореИрд▓реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдЙрдБрджрд╛ рддреНрд░реБрдЯрд┐рдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реЗрдВ, рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рд░рд╛рдореНрд░рд░реА рд╣реЗрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВред рдпреЛ рд▓реЗрдЦ рдпрд╕рд░реА рджреЗрдЦрд╛ рдкрд░реНтАНрдпреЛ, рдпреЛ рд▓реЗрдЦреНрджрд╛ рдо POSIX рдХреНрд░реЛрдирдЯреНрдпрд╛рдмрд╕рдБрдЧ рдкрд░рд┐рдЪрд┐рдд рднрдПрдБ, рд▓реЛрдХрдкреНрд░рд┐рдп рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдгрдорд╛ рдореБрдЦреНрдп рдХреНрд░реЛрди рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдХреЗрд╣реАрдХреЛ рд╕рдВрд░рдЪрдирд╛ред

рдХреЗ рддрдкрд╛рдЗрдБ рд▓рд┐рдирдХреНрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рд░ рдХреНрд░реЛрди рдХрд╛рд░реНрдпрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ? рдХреЗ рддрдкрд╛рдЗрдБ рдпреБрдирд┐рдХреНрд╕рдорд╛ рдкреНрд░рдгрд╛рд▓реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛рдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдиреБрд╣реБрдиреНрдЫ? рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдмрд╛рдЯреЛрдорд╛ рдЫреМрдВ!

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

рдкреНрд░рдЬрд╛рддрд┐рд╣рд░реВрдХреЛ рдЙрддреНрдкрддреНрддрд┐

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

рдпреБрдирд┐рдХреНрд╕-рдЬрд╕реНрддреЛ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдорд╣рд░реВрд▓реЗ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЙрддреНрдкрддреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг 7 рдпреБрдирд┐рдХреНрд╕рдорд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдБрджрдЫ, рдЬреБрди рдЧрдд рд╢рддрд╛рдмреНрджреАрдХреЛ 70 рдХреЛ рджрд╢рдХрдорд╛ рдмреЗрд▓ рд▓реНрдпрд╛рдмрд╣рд░реВрдорд╛ рд╡рд┐рдХрд╕рд┐рдд рднрдПрдХреЛ рдерд┐рдпреЛ, рдЬрд╕рдорд╛ рдкреНрд░рд╕рд┐рджреНрдз рдХреЗрди рдердореНрдкрд╕рди рдкрдирд┐ рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреНред рд╕рдВрд╕реНрдХрд░рдг 7 рдпреБрдирд┐рдХреНрд╕рд▓реЗ рдХреНрд░реЛрди рдкрдирд┐ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНтАНрдпреЛ, рдирд┐рдпрдорд┐рдд рд░реВрдкрдорд╛ рд╕реБрдкрд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рдЪрд▓рд╛рдЙрдиреЗ рд╕реЗрд╡рд╛ред

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЖрдзреБрдирд┐рдХ рдХреНрд░реЛрди рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реЛ, рддрд░ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рдЕрдкрд░реЗрдЯрд┐рдЩ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрдЭ рд╕рд░рд▓ рдерд┐рдпреЛ: рд╕реЗрд╡рд╛ рдПрдХ рдорд┐рдиреЗрдЯрдорд╛ рдПрдХ рдкрдЯрдХ рдЙрдареНрдпреЛ, рдПрдХрд▓ рдлрд╛рдЗрд▓ (/etc/lib/crontab) рдмрд╛рдЯ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕рд╣рд┐рддрдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдкрдвреНрдиреБрд╣реЛрд╕реН рд░ рдкреНрд░рджрд░реНрд╢рдирдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рджрд░реНрд╢рди рдЧрд░рд┐рдпреЛред рд╕реБрдкрд░рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рддреА рдХрд╛рд░реНрдпрд╣рд░реВ рдЬреБрди рд╣рд╛рд▓рдХреЛ рд╕рдордпрдорд╛ рдЧрд░реНрдиреБрдкрд░реНрджрдЫред

рдкрдЫрд┐, рд╕рд░рд▓ рд░ рдЙрдкрдпреЛрдЧреА рд╕реЗрд╡рд╛рдХреЛ рд╕реБрдзрд╛рд░рд┐рдПрдХреЛ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рд╕рдмреИ рдпреБрдирд┐рдХреНрд╕-рдЬрд╕реНрддреЛ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдорд╣рд░реВрд╕рдБрдЧ рдЖрдкреВрд░реНрддрд┐ рдЧрд░рд┐рдпреЛред

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

1987 рдорд╛, рдкреЙрд▓ рднрд┐рдХреНрд╕реА, рдХреНрд░реЛрди рдХреЛ рд▓рд╛рдЧреА рдпреБрдирд┐рдХреНрд╕ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реБ рдХреЛ рдЗрдЪреНрдЫрд╛рд╣рд░реБ рдХреЛ рдмрд╛рд░реЗ рдорд╛ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдЧрд░реА, рдбреЗрдорди рдХреЛ рдЕрд░реНрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдЧрд░реНрдпреЛ рдЬрд╕рд▓реЗ рдкрд╛рд░рдореНрдкрд░рд┐рдХ рдХреНрд░реЛрди рдХреЛ рдХреЗрд╣рд┐ рд╕рдорд╕реНрдпрд╛рд╣рд░реБ рд▓рд╛рдИ рд╕реБрдзрд╛рд░ рдЧрд░реНрдпреЛ рд░ рдЯреЗрдмрд▓ рдлрд╛рдЗрд▓рд╣рд░реБ рдХреЛ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрдпреЛред

Vixie рдХреНрд░реЛрдирдХреЛ рддреЗрд╕реНрд░реЛ рд╕рдВрд╕реНрдХрд░рдгрд▓реЗ POSIX рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрди рдерд╛рд▓реНрдпреЛ, рдердк рд░реВрдкрдорд╛, рдХрд╛рд░реНрдпрдХреНрд░рдорд╕рдБрдЧ рдЙрджрд╛рд░ рдЗрдЬрд╛рдЬрддрдкрддреНрд░ рдерд┐рдпреЛ, рд╡рд╛ рдмрд░реБ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдЗрдЬрд╛рдЬрддрдкрддреНрд░ рдерд┐рдПрди, README рдорд╛ рдЗрдЪреНрдЫрд╛рд╣рд░реВ рдмрд╛рд╣реЗрдХ: рд▓реЗрдЦрдХрд▓реЗ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рджрд┐рджреИрди, рд▓реЗрдЦрдХрдХреЛ рдирд╛рдоред рдореЗрдЯрд╛рдЙрди рд╕рдХрд┐рдБрджреИрди, рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдорд╛рддреНрд░ рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдВрдЧ рдмреЗрдЪреНрди рд╕рдХрд┐рдиреНрдЫред рдпреА рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рдирд┐: рд╢реБрд▓реНрдХ рд╕рдлреНрдЯрд╡реЗрдпрд░рдХрд╛ рд╕рд┐рджреНрдзрд╛рдиреНрддрд╣рд░реВрд╕рдБрдЧ рдорд┐рд▓реНрджреЛ рднрдП рдЬреБрди рддреА рд╡рд░реНрд╖рд╣рд░реВрдорд╛ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдерд┐рдпреЛ, рддреНрдпрд╕реИрд▓реЗ 90 рдХреЛ рджрд╢рдХрдХреЛ рд╕реБрд░реБрдорд╛ рджреЗрдЦрд╛ рдкрд░реНрдиреЗ рдХреЗрд╣реА рдкреНрд░рдореБрдЦ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдгрд╣рд░реВрд▓реЗ Vixie рдХреНрд░реЛрдирд▓рд╛рдИ рдЙрдиреАрд╣рд░реВрдХреЛ рдкреНрд░рдгрд╛рд▓реАрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдП рд░ рдЖрдЬ рдкрдирд┐ рдпрд╕рд▓рд╛рдИ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрджреИрдЫрдиреНред

рд╡рд┐рд╢реЗрд╖ рдЧрд░реА, Red Hat рд░ SUSE рд▓реЗ Vixie cron - cronie рдХреЛ рдлреЛрд░реНрдХ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрджрдЫ, рд░ Debian рд░ Ubuntu рд▓реЗ Vixie cron рдХреЛ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдзреЗрд░реИ рдкреНрдпрд╛рдЪрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред

рдкрд╣рд┐рд▓реЗ POSIX рдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреНрд░реЛрдирдЯреНрдпрд╛рдмрд╕рдБрдЧ рдкрд░рд┐рдЪрд┐рдд рдЧрд░реМрдВ, рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА Vixie рдХреНрд░реЛрдирдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ рд╡рд┐рд╕реНрддрд╛рд░рд╣рд░реВ рд░ рд▓реЛрдХрдкреНрд░рд┐рдп рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдгрд╣рд░реВрдорд╛ Vixie рдХреНрд░реЛрдирдХреЛ рднрд┐рдиреНрдирддрд╛рд╣рд░реВрдХреЛ рдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рд╣реЗрд░реНрдиреЗрдЫреМрдВред рд░ рдЕрдиреНрддрдорд╛, рдХреЗрдХрдорд╛ рдЪреЗрд░реА рдХреНрд░реЛрди рдбреЗрдорди рдЙрдкрдХрд░рдгрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реЛред

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], рдЬрд╣рд╛рдБ реж рдЖрдЗрддрдмрд╛рд░ рд╣реЛред рдЕрдиреНрддрд┐рдо, рдЫреИрдареМрдВ, рдлрд┐рд▓реНрдб рдПрдЙрдЯрд╛ рд░реЗрдЦрд╛ рд╣реЛ рдЬреБрди рдорд╛рдирдХ рдХрдорд╛рдгреНрдб рджреЛрднрд╛рд╖реЗрджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреЗрдЫред

рдкрд╣рд┐рд▓реЛ рдкрд╛рдБрдЪ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдорд╛, рдорд╛рдирд╣рд░реВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдорджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:

# ╨╖╨░╨┤╨░╤З╨░, ╨▓╤Л╨┐╨╛╨╗╨╜╤П╨╡╨╝╨░╤П ╨▓ ╨┐╨╡╤А╨▓╤Г╤О ╨╕ ╨┤╨╡╤Б╤П╤В╤Г╤О ╨╝╨╕╨╜╤Г╤В╤Л ╨║╨░╨╢╨┤╨╛╨│╨╛ ╤З╨░╤Б╨░
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. SHELL - рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдХрдорд╛рдгреНрдб рджреЛрднрд╛рд╖реЗрдХреЛ рдмрд╛рдЯреЛред

рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛, POSIX рд▓реЗ рдпреА рдЪрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдирд╣рд░реВ рдХрд╣рд╛рдБрдмрд╛рдЯ рдЖрдЙрдБрдЫ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдХреЗрд╣реА рдкрдирд┐ рднрдиреНрджреИрдиред

рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдмрд┐рдХреНрд░реЗрддрд╛ - Vixie cron 3.0pl1

рд▓реЛрдХрдкреНрд░рд┐рдп рдХреНрд░реЛрди рднреЗрд░рд┐рдпрдиреНрдЯрд╣рд░реВрдХреЛ рд╕рд╛рдЭрд╛ рдкреВрд░реНрд╡рдЬ Vixie cron 3.0pl1 рд╣реЛ, 1992 рдорд╛ comp.sources.unix рдореЗрд▓рд┐рдЩ рд╕реВрдЪреАрдорд╛ рдкреЗрд╢ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рд╣рд╛рдореА рдпрд╕ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВрд▓рд╛рдИ рдердк рд╡рд┐рд╡рд░рдгрдорд╛ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред

Vixie cron рджреБрдИ рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ (cron рд░ crontab) рдорд╛ рдЖрдЙрдБрдЫред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛, рдбреЗрдорди рдкреНрд░рдгрд╛рд▓реА рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛ рд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдмрд╛рдЯ рдХрд╛рд░реНрдпрд╣рд░реВ рдкрдвреНрди рд░ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рдЫ, рд░ рдХреНрд░реЛрдирдЯреНрдпрд╛рдм рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рд╕рдореНрдкрд╛рджрди рдЧрд░реНрди рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рдЫред

рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рд╣рд░реВ

рд╕реБрдкрд░рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛ /etc/crontab рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫред рдкреНрд░рдгрд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛рдХреЛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ Vixie рдХреНрд░реЛрдирдХреЛ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕рд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫ, рдпрд╕рдорд╛ рдЫреИрдЯреМрдВ рд╕реНрддрдореНрднрд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдирд╛рдорд▓рд╛рдИ рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫ рдЬрд╕рдХреЛ рддрд░реНрдлрдмрд╛рдЯ рдХрд╛рд░реНрдп рд╕реБрд░реБ рдЧрд░рд┐рдПрдХреЛ рдЫ:

# ╨Ч╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П ╨╡╨╢╨╡╨╝╨╕╨╜╤Г╤В╨╜╨╛ ╨╛╤В ╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╨╡╨╗╤П vlad
* * * * * vlad /path/to/exec

рдирд┐рдпрдорд┐рдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ /var/cron/tabs/username рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреН рд░ рдЙрд╣реА рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЬрдм рддрдкрд╛рдЗрдБ рдПрдХ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд░реВрдкрдорд╛ crontab рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЪрд▓рд╛рдЙрдиреБрд╣реБрдиреНрдЫ, рдпреА рдлрд╛рдЗрд▓рд╣рд░реВ рд╣реБрдиреН рдЬреБрди рд╕рдореНрдкрд╛рджрди рдЧрд░рд┐рдиреНрдЫред

рдХреНрд░реЛрдирдЯреНрдпрд╛рдмрдорд╛ рдкрд╣реБрдБрдЪ рднрдПрдХрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреАрд╣рд░реВ /var/cron/allow рд░ /var/cron/deny рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░рд┐рдиреНрдЫ, рдЬрд╣рд╛рдБ рддрдкрд╛рдИрдВрд▓реЗ рдПрдХ рдЕрд▓рдЧ рд▓рд╛рдЗрдирдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреНрдЫред

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

POSIX crontab рдХреЛ рддреБрд▓рдирд╛рдорд╛, Paul Vixey рдХреЛ рд╕рдорд╛рдзрд╛рдирд▓реЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдХреЛ рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛рдХреЛ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕рдорд╛ рдзреЗрд░реИ рдзреЗрд░реИ рдЙрдкрдпреЛрдЧреА рдкрд░рд┐рдорд╛рд░реНрдЬрдирд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред

рдПрдЙрдЯрд╛ рдирдпрд╛рдБ рддрд╛рд▓рд┐рдХрд╛ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ рдЙрдкрд▓рдмреНрдз рднрдПрдХреЛ рдЫ: рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдирд╛рдо (рд╕реЛрдо, рдордВрдЧрд▓, рд░ рдпрд╕реНрддреИ) рджреНрд╡рд╛рд░рд╛ рд╣рдкреНрддрд╛ рд╡рд╛ рдорд╣рд┐рдирд╛рд╣рд░реВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

# ╨Ч╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П ╨╡╨╢╨╡╨╝╨╕╨╜╤Г╤В╨╜╨╛ ╨┐╨╛ ╨┐╨╛╨╜╨╡╨┤╨╡╨╗╤М╨╜╨╕╨║╨░╨╝ ╨╕ ╨▓╤В╨╛╤А╨╜╨╕╨║╨░╨╝ ╨▓ ╤П╨╜╨▓╨░╤А╨╡
* * * Jan Mon,Tue /path/to/exec

рддрдкрд╛рдИрд▓реЗ рдЪрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬрд╕рдХреЛ рдорд╛рдзреНрдпрдордмрд╛рдЯ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕реБрд░реВ рдЧрд░рд┐рдиреНрдЫ:

# ╨Ч╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П ╤Б ╤И╨░╨│╨╛╨╝ ╨▓ ╨┤╨▓╨╡ ╨╝╨╕╨╜╤Г╤В╤Л
*/2 * * * Mon,Tue /path/to/exec

рдЪрд░рдгрд╣рд░реВ рд░ рдЕрдиреНрддрд░рд╛рд▓рд╣рд░реВ рдорд┐рд╢реНрд░рд┐рдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:

# ╨Ч╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П ╤Б ╤И╨░╨│╨╛╨╝ ╨▓ ╨┤╨▓╨╡ ╨╝╨╕╨╜╤Г╤В╤Л ╨▓ ╨┐╨╡╤А╨▓╤Л╤Е ╨┤╨╡╤Б╤П╤В╤М ╨╝╨╕╨╜╤Г╤В ╨║╨░╨╢╨┤╨╛╨│╨╛ ╤З╨░╤Б╨░
0-10/2 * * * * /path/to/exec

рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕рдХрд╛ рд╕рд╣рдЬ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рд╕рдорд░реНрдерд┐рдд рдЫрдиреН (рд░рд┐рдмреБрдЯ, рд╡рд╛рд░реНрд╖рд┐рдХ, рд╡рд╛рд░реНрд╖рд┐рдХ, рдорд╛рд╕рд┐рдХ, рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ, рджреИрдирд┐рдХ, рдордзреНрдпрд░рд╛рдд, рдШрдгреНрдЯрд╛):

# ╨Ч╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П ╨┐╨╛╤Б╨╗╨╡ ╨┐╨╡╤А╨╡╨╖╨░╨│╤А╤Г╨╖╨║╨╕ ╤Б╨╕╤Б╤В╨╡╨╝╤Л
@reboot /exec/on/reboot
# ╨Ч╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П ╤А╨░╨╖ ╨▓ ╨┤╨╡╨╜╤М
@daily /exec/daily
# ╨Ч╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П ╤А╨░╨╖ ╨▓ ╤З╨░╤Б
@hourly /exec/daily

рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рддрд╛рд╡рд░рдг

Vixie cron рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рд╣рд░реВ USER, LOGNAME рд░ HOME рд▓рд╛рдИ рдХреЗрд╡рд▓ рдбреЗрдордирджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рд╣реЛрдЗрди, рддрд░ рдлрд╛рдЗрд▓рдмрд╛рдЯ рд▓рд┐рдЗрдПрдХреЛ рд╣реЛред passwdред PATH рдЪрд░ "/usr/bin:/bin" рдорд╛ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ SHELL рдЪрд░ "/bin/sh" рдорд╛ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫред LOGNAME рдмрд╛рд╣реЗрдХ рд╕рдмреИ рдЪрд░рд╣рд░реВрдХреЛ рдорд╛рдирд╣рд░реВ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рдХреЗрд╣рд┐ рдкрд░рд┐рд╡реЗрд╢ рдЪрд░рд╣рд░реВ (рд╕рдмреИ рднрдиреНрджрд╛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ SHELL рд░ HOME) рдХрд╛рд░реНрдп рдЪрд▓рд╛рдЙрди рдХреНрд░реЛрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдЕрдиреБрдХреВрд▓рди рдХрд╛рд░реНрдпрд╣рд░реВ рдЪрд▓рд╛рдЙрди рдорд╛рдирдХ sh рдХреЛ рд╕рдЯреНрдЯрд╛ bash рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рдХреЗ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

SHELL=/bin/bash
HOME=/tmp/
# exec ╨▒╤Г╨┤╨╡╤В ╨╖╨░╨┐╤Г╤Й╨╡╨╜ bash-╨╡╨╝ ╨▓ /tmp/
* * * * * /path/to/exec

рдЕрдиреНрддрддрдГ, рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдмреИ рд╡рд╛рддрд╛рд╡рд░рдгреАрдп рдЪрд░рд╣рд░реВ (рдХреНрд░реЛрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рд╡рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ) рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдХрд╛рд░реНрдпрдорд╛ рдкрдард╛рдЗрдиреЗрдЫред

рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рдореНрдкрд╛рджрди рдЧрд░реНрди, crontab рд▓реЗ VISUAL рд╡рд╛ EDITOR рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдореНрдкрд╛рджрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдпрджрд┐ crontab рдЪрд▓рд╛рдЗрдПрдХреЛ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдпреА рдЪрд░рд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЫреИрдирдиреН рднрдиреЗ, "/usr/ucb/vi" рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ (ucb рд╕рд╛рдпрдж рдХреНрдпрд╛рд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп, рдмрд░реНрдХрд▓реЗ рд╣реЛ)ред

рдбреЗрдмрд┐рдпрди рд░ рдЙрдмреБрдиреНрдЯреБрдорд╛ рдХреНрд░реЛрди

рдбреЗрдмрд┐рдпрди рд░ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд┐рддрд░рдгрдХрд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдЬрд╛рд░реА рдЧрд░реЗрдХрд╛ рдЫрдиреН рдЕрддреНрдпрдзрд┐рдХ рдкрд░рд┐рдорд╛рд░реНрдЬрд┐рдд рд╕рдВрд╕реНрдХрд░рдг Vixie рдХреНрд░реЛрди рд╕рдВрд╕реНрдХрд░рдг 3.0pl1ред рддрд╛рд▓рд┐рдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕рдорд╛ рдХреБрдиреИ рднрд┐рдиреНрдирддрд╛рд╣рд░реВ рдЫреИрдирдиреН; рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдЙрд╣реА Vixie рдХреНрд░реЛрди рд╣реЛред рд╕рдмреИрднрдиреНрджрд╛ рдареВрд▓реЛ рдирдпрд╛рдБ рд╕реБрд╡рд┐рдзрд╛: рд╕рдорд░реНрдерди syslog, SELinux ╨╕ PAM.

рдХрдо рдзреНрдпрд╛рди рджрд┐рдиреЗ, рддрд░ рдареЛрд╕ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрд▓реЗ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рд╣рд░реВ рд░ рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдХреЛ рд╕реНрдерд╛рди рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред

рдбреЗрдмрд┐рдпрдирдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ /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

рдХреНрд░реЛрдиреА - Vixie рдХреНрд░реЛрди рд╕рдВрд╕реНрдХрд░рдг 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 рдорд╛рд░реНрдлрдд рдХреНрд░реЛрди рдХрд╛рд░реНрдпрд╣рд░реВ рдЪрд▓рд╛рдЙрдБрджрд╛, bash рд╢реЗрд▓ POSIX-compliant рдореЛрдбрдорд╛ рд╕реБрд░реБ рд╣реБрдиреНрдЫ рд░ рдХреБрдиреИ рдкрдирд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкрдвреНрджреИрди, рдЧреИрд░-рдЕрдиреНрддрд░реНрдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореЛрдбрдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рд╣реБрдиреНрдЫред

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 рдХреНрд░реЛрди рдЙрдкрдХрд░рдг

рдХреНрд░реЛрдирдХрд╛ рдЖрдзреБрдирд┐рдХ рд╕рдиреНрддрд╛рдирд╣рд░реВрд▓реЗ Vixie рдХреНрд░реЛрдирдХреЛ рддреБрд▓рдирд╛рдорд╛ рдЖрдореВрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрдХрд╛ рдЫреИрдирдиреН, рддрд░ рдЕрдЭреИ рдкрдирд┐ рдирдпрд╛рдБ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реЗрдХрд╛ рдЫрдиреН рдЬреБрди рдХрд╛рд░реНрдпрдХреНрд░рдордХрд╛ рд╕рд┐рджреНрдзрд╛рдиреНрддрд╣рд░реВ рдмреБрдЭреНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред рдпреА рдордзреНрдпреЗ рдзреЗрд░реИ рд╡рд┐рд╕реНрддрд╛рд░рд╣рд░реВ рдЦрд░рд╛рдм рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН рд░ рдХреЛрдб рднреНрд░рдорд┐рдд рдЫрдиреНред Paul Vixey рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рдХреНрд░реЛрди рд╕реНрд░реЛрдд рдХреЛрдб рдкрдвреНрди рдПрдХ рдЦреБрд╢реА рдЫред

рддреНрдпрд╕рдХрд╛рд░рдг, рдореИрд▓реЗ рд╡рд┐рдХрд╛рд╕рдХрд╛ рджреБрдмреИ рд╢рд╛рдЦрд╛рд╣рд░реВрдорд╛ рд╕рд╛рдЭрд╛ рдХреНрд░реЛрди рдкреНрд░реЛрдЧреНрд░рд╛рдордХреЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХреНрд░реЛрди рдЙрдкрдХрд░рдг рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВ - 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=рдорд╛рдирдХреЛ рд░реЗрдЦрд╛рд╣рд░реВ) рд╡рд╛ рдХрд╛рд░реНрдп рд╡рд┐рд╡рд░рдг рдкрдврд┐рдПрдХреЛ рдЫ (* * * * * /path/to/exec) load_entry рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ред

load_entry рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреЗ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдирд┐рдХрд╛рдп рд╣рд╛рдореНрд░реЛ рдХрд╛рд░реНрдп рд╣реЛ, рдЬреБрди рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪреАрдорд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рдЫред рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдиреИ рд╕рдордп рдврд╛рдБрдЪрд╛рдХреЛ рднрд░реНрдмреЛрдЬ рдкрд╛рд░реНрд╕рд┐рдЩ рдЧрд░реНрджрдЫ, рддрд░ рд╣рд╛рдореА рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд░ рдХрд╛рд░реНрдп рд╕реБрд░реБрд╡рд╛рдд рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рдЧрдардирдорд╛ рдмрдвреА рдЪрд╛рд╕реЛ рд░рд╛рдЦреНрдЫреМрдВ:

/* ╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╨╡╨╗╤М ╨╕ ╨│╤А╤Г╨┐╨┐╨░ ╨┤╨╗╤П ╨╖╨░╨┐╤Г╤Б╨║╨░ ╨╖╨░╨┤╨░╤З╨╕ ╨▒╨╡╤А╤Г╤В╤Б╤П ╨╕╨╖ passwd*/
e->uid = pw->pw_uid;
e->gid = pw->pw_gid;

/* ╤И╨╡╨╗╨╗ ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О (/bin/sh), ╨╡╤Б╨╗╨╕ ╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╨╡╨╗╤М ╨╜╨╡ ╤Г╨║╨░╨╖╨░╨╗ ╨┤╤А╤Г╨│╨╛╨╡ */
e->envp = env_copy(envp);
if (!env_get("SHELL", e->envp)) {
    sprintf(envstr, "SHELL=%s", _PATH_BSHELL);
    e->envp = env_set(e->envp, envstr);
}
/* ╨┤╨╛╨╝╨░╤И╨╜╤П╤П ╨┤╨╕╤А╨╡╨║╤В╨╛╤А╨╕╤П */
if (!env_get("HOME", e->envp)) {
    sprintf(envstr, "HOME=%s", pw->pw_dir);
    e->envp = env_set(e->envp, envstr);
}
/* ╨┐╤Г╤В╤М ╨┤╨╗╤П ╨┐╨╛╨╕╤Б╨║╨░ ╨┐╤А╨╛╨│╤А╨░╨╝╨╝ */
if (!env_get("PATH", e->envp)) {
    sprintf(envstr, "PATH=%s", _PATH_DEFPATH);
    e->envp = env_set(e->envp, envstr);
}
/* ╨╕╨╝╤П ╨┐╨╛╨╗╤М╨╖╨╛╨▓╤В╨╡╨╗╤П ╨▓╤Б╨╡╨│╨┤╨░ ╨╕╨╖ passwd */
sprintf(envstr, "%s=%s", "LOGNAME", pw->pw_name);
e->envp = env_set(e->envp, envstr);

рдореБрдЦреНрдп рд▓реВрдк рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╣рд╛рд▓рдХреЛ рд╕реВрдЪреАрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрдЫред

рдореБрдЦреНрдп рд▓реВрдк

рд╕рдВрд╕реНрдХрд░рдг 7 рдпреБрдирд┐рдХреНрд╕рдХреЛ рдореВрд▓ рдХреНрд░реЛрдирд▓реЗ рдПрдХрджрдо рд╕рд░рд▓ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНтАНрдпреЛ: рдпрд╕рд▓реЗ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд▓рд╛рдИ рд▓реБрдкрдорд╛ рдкреБрди: рдкрдвреНрдпреЛ, рд╕реБрдкрд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд░реВрдкрдорд╛ рд╣рд╛рд▓рдХреЛ рдорд┐рдиреЗрдЯрдХреЛ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕реБрд░реВ рдЧрд░реНтАНрдпреЛ, рд░ рдЕрд░реНрдХреЛ рдорд┐рдиреЗрдЯрдХреЛ рд╕реБрд░реВ рдирднрдПрд╕рдореНрдо рд╕реБрддреНрдпреЛред рдкреБрд░рд╛рдиреЛ рдореЗрд╕рд┐рдирд╣рд░реВрдорд╛ рдпреЛ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдгрд▓реЗ рдзреЗрд░реИ рд╕реНрд░реЛрддрд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫред

SysV рдорд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЬрд╕рдорд╛ рдбреЗрдорди рдпрд╛ рдд рдХрд╛рд░реНрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдирд┐рдХрдЯрддрдо рдорд┐рдиреЗрдЯ рд╕рдореНрдо, рд╡рд╛ 30 рдорд┐рдиреЗрдЯрдХреЛ рд▓рд╛рдЧрд┐ рд╕реБрддреНрди рдЧрдпреЛред рдпрд╕ рдореЛрдбрдорд╛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреБрди: рдкрдвреНрди рд░ рдХрд╛рд░реНрдпрд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдереЛрд░реИ рд╕реНрд░реЛрддрд╣рд░реВ рдЦрдкрдд рднрдП, рддрд░ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕реВрдЪреА рджреНрд░реБрдд рд░реВрдкрдорд╛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрди рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рднрдпреЛред

Vixie cron рдПрдХ рдорд┐рдиреЗрдЯрдорд╛ рдПрдХ рдкрдЯрдХ рдХрд╛рд░реНрдп рд╕реВрдЪреАрд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрди рдлрд░реНрдХрд┐рдпреЛ, рд╕реМрднрд╛рдЧреНрдпрд╡рд╢ 80s рдХреЛ рдЕрдиреНрддреНрдпрдорд╛ рддреНрдпрд╣рд╛рдБ рдорд╛рдирдХ рдпреБрдирд┐рдХреНрд╕ рдореЗрд╕рд┐рдирд╣рд░реВрдорд╛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдердк рд╕реНрд░реЛрддрд╣рд░реВ рдерд┐рдП:

/* ╨┐╨╡╤А╨▓╨╕╤З╨╜╨░╤П ╨╖╨░╨│╤А╤Г╨╖╨║╨░ ╨╖╨░╨┤╨░╤З */
load_database(&database);
/* ╨╖╨░╨┐╤Г╤Б╤В╨╕╤В╤М ╨╖╨░╨┤╨░╤З╨╕, ╨┐╨╛╤Б╤В╨░╨▓╨╗╨╡╨╜╨╜╤Л╨╡ ╨║ ╨▓╤Л╨┐╨╛╨╗╨╜╨╡╨╜╨╕╤О ╨┐╨╛╤Б╨╗╨╡ ╨┐╨╡╤А╨╡╨╖╨░╨│╤А╤Г╨╖╨║╨╕ ╤Б╨╕╤Б╤В╨╡╨╝╤Л */
run_reboot_jobs(&database);
/* ╤Б╨┤╨╡╨╗╨░╤В╤М TargetTime ╨╜╨░╤З╨░╨╗╨╛╨╝ ╨▒╨╗╨╕╨╢╨░╨╣╤И╨╡╨╣ ╨╝╨╕╨╜╤Г╤В╤Л */
cron_sync();
while (TRUE) {
    /* ╨▓╤Л╨┐╨╛╨╗╨╜╨╕╤В╤М ╨╖╨░╨┤╨░╤З╨╕, ╨┐╨╛╤Б╨╗╨╡ ╤З╨╡╨│╨╛ ╤Б╨┐╨░╤В╤М ╨┤╨╛ TargetTime ╤Б ╨┐╨╛╨┐╤А╨░╨▓╨║╨╛╨╣ ╨╜╨░ ╨▓╤А╨╡╨╝╤П, ╨┐╨╛╤В╤А╨░╤З╨╡╨╜╨╜╨╛╨╡ ╨╜╨░ ╨╖╨░╨┤╨░╤З╨╕ */
    cron_sleep();

    /* ╨┐╨╡╤А╨╡╤З╨╕╤В╨░╤В╤М ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╤О */
    load_database(&database);

    /* ╤Б╨╛╨▒╤А╨░╤В╤М ╨╖╨░╨┤╨░╤З╨╕ ╨┤╨╗╤П ╨┤╨░╨╜╨╜╨╛╨╣ ╨╝╨╕╨╜╤Г╤В╤Л */
    cron_tick(&database);

    /* ╨┐╨╡╤А╨╡╨▓╨╡╤Б╤В╨╕ TargetTime ╨╜╨░ ╨╜╨░╤З╨░╨╗╨╛ ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╡╨╣ ╨╝╨╕╨╜╤Г╤В╤Л */
    TargetTime += 60;
}

cron_sleep рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди, 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;
}

рддреНрдпреЛ рдореВрд▓рддрдГ рд╕рдмреИ рдХреНрд░реЛрди рд╣реЛред рдореИрд▓реЗ рдХреЗрд╣рд┐ рд░реЛрдЪрдХ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдЫреЛрдбреЗрдВ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд░рд┐рдореЛрдЯ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд▓реЗрдЦрд╛, рддрд░ рдореИрд▓реЗ рдореБрдЦреНрдп рдХреБрд░рд╛рд▓рд╛рдИ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдЧрд░реЗрдВред

рдкрдЫрд┐рд╢рдмреНрдж

рдХреНрд░реЛрди рдПрдХ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╕рд░рд▓ рд░ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реЛ, рдпреБрдирд┐рдХреНрд╕ рд╕рдВрд╕рд╛рд░рдХреЛ рдЙрддреНрдХреГрд╖реНрдЯ рдкрд░рдореНрдкрд░рд╛рд╣рд░реВрдорд╛ рдмрдирд╛рдЗрдПрдХреЛред рдЙрдиреА рдХреБрдиреИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рдЧрд░реНрджреИрдирдиреН, рддрд░ рдЙрдирд▓реЗ рдзреЗрд░реИ рджрд╢рдХрджреЗрдЦрд┐ рдЖрдлреНрдиреЛ рдХрд╛рдо рдЕрджреНрднреБрдд рд░реВрдкрдорд╛ рдЧрд░рд┐рд░рд╣реЗрдХреА рдЫрд┐рдиреНред Ubuntu рд╕рдБрдЧ рдЖрдЙрдиреЗ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдПрдХ рдШрдгреНрдЯрд╛ рднрдиреНрджрд╛ рдмрдвреА рд▓рд╛рдЧреЗрди, рд░ рдореИрд▓реЗ рдзреЗрд░реИ рд░рдорд╛рдЗрд▓реЛ рдЧрд░реЗрдВ! рдорд▓рд╛рдИ рдЖрд╢рд╛ рдЫ рдХрд┐ рдо рдпреЛ рддрдкрд╛рдИрдВ рд╕рдВрдЧ рд╕рд╛рдЭрд╛ рдЧрд░реНрди рд╕рдХреНрд╖рдо рдерд┐рдПрдБред

рдорд▓рд╛рдИ рддрдкрд╛рдЗрдБрдХреЛ рдмрд╛рд░реЗрдорд╛ рдерд╛рд╣рд╛ рдЫреИрди, рддрд░ рдо рдпреЛ рдорд╣рд╕реБрд╕ рдЧрд░реНрди рдЕрд▓рд┐ рджреБ: рдЦреА рдЫреБ рдХрд┐ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, рдпрд╕рдХреЛ рдЕрддрд┐-рдЬрдЯрд┐рд▓ рд░ рдЕрддрд┐-рдЕрдореВрд░реНрдд рдХреЛ рдкреНрд░рд╡реГрддреНрддрд┐ рд╕рдВрдЧ, рд▓рд╛рдореЛ рд╕рдордп рджреЗрдЦрд┐ рдпрд╕реНрддреЛ рд╕рд░рд▓рддрд╛ рдХреЛ рд▓рд╛рдЧреА рдЕрдиреБрдХреВрд▓ рдЫреИрдиред

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

рдЫреЛрдЯрдХрд░реАрдорд╛, рдпреБрдирд┐рдХреНрд╕рд▓рд╛рдИ рдорд╛рдпрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд╕рд╛рдзрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рддрдкрд╛рдИрдВрдХреЛ рдкреНрд▓реЗрдЯрдлрд░реНрдордХреЛ рд▓рд╛рдЧрд┐ рдорди рдкрдвреНрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реН!

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди