
рдХреНрд▓рд╛рд╕рд┐рдХ рдиреЗ рд▓рд┐рдЦрд╛ рдХрд┐ рдЦреБрд╢ рдШрдВрдЯреЗ рдирд╣реАрдВ рджреЗрдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЙрди рдЬрдВрдЧрд▓реА рд╕рдордп рдореЗрдВ, рди рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдереЗ рдФрд░ рди рд╣реА рдпреВрдирд┐рдХреНрд╕, рд▓реЗрдХрд┐рди рдЖрдЬрдХрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ: рдЙрдирдХреЗ рдмрдЬрд╛рдп рдХреНрд░реЙрди рд╕рдордп рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВрдЧреЗред
рдореЗрд░реЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрдордЬреЛрд░реА рдФрд░ рджрд┐рдирдЪрд░реНрдпрд╛ рджреЛрдиреЛрдВ рд╣реИрдВред sed, awk, wc, cut рдФрд░ рдЕрдиреНрдп рдкреБрд░рд╛рдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ рдХреНрд░реЛрди рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, 70 рдХреЗ рджрд╢рдХ рдХреЗ рдПрдХ рдЕрдиреБрд╕реВрдЪрдХред
рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдореИрдВрдиреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛, рд╕рддрд╣реА рд░реВрдк рд╕реЗ рдХреНрд░реЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рдпрд╣ рд▓реЗрдЦ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬрдм рд▓реЗрдЦрди рдЬреЛ рдореБрдЭреЗ рдкреЙрдЬрд╝рд┐рдХ рдХреНрд░реЙрд╕реНрдЯрдм рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдЖ, рд▓реЛрдХрдкреНрд░рд┐рдп рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдгреЛрдВ рдореЗрдВ рдореБрдЦреНрдп рдХреНрд░реЛрди рд╡реЗрд░рд┐рдПрдВрдЯ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рдЙрдкрдХрд░рдгред
рдХреНрд░реЛрди рдореЗрдВ рд▓рд┐рдирдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдХрд╛рд░реНрдп рдЪрд▓рд╛рдирд╛? рдпреВрдирд┐рдХреНрд╕ рдкреНрд░рдгрд╛рд▓реА рдЖрд╡реЗрджрди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? рдлрд┐рд░ рд╣рдо рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╣реИрдВ!
рд╕рд╛рдордЧреНрд░реА
рдкреНрд░рдЬрд╛рддрд┐рдпреЛрдВ рдХреА рдЙрддреНрдкрддреНрддрд┐
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЖрд╡рдзрд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рд╕рднреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕реЗрд╡рд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЬреЛ рдХреЗрдВрджреНрд░реАрдХреГрдд рдпреЛрдЬрдирд╛ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рд╣реИред
1970 рдХреЗ рджрд╢рдХ рдореЗрдВ рдмреЗрд▓ рд▓реИрдмреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд, рдкреНрд░рд╕рд┐рджреНрдз рдХреЗрди рдереЙрдореНрдкрд╕рди рд╕рд╣рд┐рдд, рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 7 рдпреВрдирд┐рдХреНрд╕ рд╕реЗ рдЙрдирдХреА рд╡рдВрд╢рд╛рд╡рд▓реА рд╣реИред рд╕рдВрд╕реНрдХрд░рдг 7 рдпреВрдирд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде, рдХреНрд░реЛрди, рд╕реБрдкрд░рд╕реБрд╕рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рдпрдорд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рднреА рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдереАред
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдзреБрдирд┐рдХ рдХреНрд░реЛрди рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ рднреА рд╕рд░рд▓ рдерд╛: рд╕реЗрд╡рд╛ рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЙрдарддреА рд╣реИ, рдПрдХ рд╣реА рдлрд╛рдЗрд▓ (/ etc / lib / crontab) рд╕реЗ рдХрд╛рд░реНрдп рдкреНрд▓реЗрдЯ рдкрдврд╝рддреА рд╣реИ рдФрд░ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рддреА рд╣реИ рдЬреЛ рд╕реБрдкрд░рдпреБрдЬрд░ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдорд┐рдирдЯ рдореЗрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред ред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рд╕рд░рд▓ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЙрдиреНрдирдд рд╡рд┐рдХрд▓реНрдк рд╕рднреА рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдЖрдПред
1992 рдореЗрдВ рдХреНрд░реЙрд╕реНрдЯреИрдм рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡рд┐рд╡рд░рдг рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдореБрдЦреНрдп рдорд╛рдирдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдереЗ - рдкреЛрд╕рд┐рдХреНрд╕ - рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдбреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рд╕реЗ рдХреНрд░реЛрди рдбреА рдЬреНрдпреВрд░ рдорд╛рдирдХ рдмрди рдЧрдпрд╛ред
1987 рдореЗрдВ, рдкреЙрд▓ рд╡рд┐рдХреНрд╕реА рдиреЗ рдХреНрд░реЛрди рдХреЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреНрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбреЗрдореЙрди рдХрд╛ рдПрдХ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬреЛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХреНрд░реЛрди рдХреА рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЯреЗрдмрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рддреАрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рддрдХ, рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди рдиреЗ POSIX рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрджрд╛рд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдерд╛, рдпрд╛ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдирд╣реАрдВ рдерд╛, README рдореЗрдВ рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛: рд▓реЗрдЦрдХ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЖрдк рд▓реЗрдЦрдХ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдмреЗрдЪ рд╕рдХрддреЗ рд╣реИрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдпреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рдереАрдВ, рдЬреЛ рдЙрди рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП 90 рдХреЗ рджрд╢рдХ рдХреЗ рд╢реБрд░реБрдЖрддреА рджрд┐рдиреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдкреНрд░рдореБрдЦ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди рдХреЛ рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рдЧрдП рдФрд░ рдЕрднреА рднреА рдЗрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, Red Hat рдФрд░ SUSE рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди - рдХреНрд░реЛрдиреА рдХрд╛рдВрдЯрд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдбреЗрдмрд┐рдпрди рдФрд░ рдЙрдмрдВрдЯреВ рдореВрд▓ рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдкреИрдЪ рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо POSIX рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд░реЙрд╕реНрдЯреИрдм рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рд╡рд┐рдХреНрд╕реА рдХреНрд░реЙрди рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдореЗрдВ рд╡рд┐рдХреНрд╕реА рдХреНрд░реЙрди рд╡рд┐рд╡рд┐рдзрддрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХреЗрдХ рдкрд░ рдЪреЗрд░реА рдХреНрд░реЛрди рдбреЗрдорди рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╣реИред
рдкреЛрдЬреАрдХреНрд╕ рдХреНрд░реЙрд╕реНрдЯреИрдм
рдпрджрд┐ рдореВрд▓ рдХреНрд░реЛрди рд╣рдореЗрд╢рд╛ рд╕реБрдкрд░рдпреБрд╕рд░ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдзреБрдирд┐рдХ рдЕрдиреБрд╕реВрдЪрд┐рдпрд╛рдВ рдЕрдХреНрд╕рд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрддреА рд╣реИрдВ, рдЬреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдХреНрд░реЛрди рдПрд╕ рдХреЛ рджреЛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдЪрд▓ рд░рд╣реЗ рдХреНрд░реЛрди рдбреЗрдорди рдФрд░ рдХреНрд░реЙрд╕реНрдЯреИрдм рдЙрдкрдпреЛрдЧрд┐рддрд╛ред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдбреЗрдорди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
POSIX рдорд╛рдирдХ рдбреЗрдореЙрди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ crontab рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдФрдкрдЪрд╛рд░рд┐рдХ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдирд┐рд╣рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рд╣реИред
рдЪрд╛рд░ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЖрдк рдХреЙрдиреНрдЯреИрдм рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдлрд╝рд╛рдЗрд▓ рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рд▓реЛрдб рдХрд░реЗрдВ, рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛ рджрд┐рдЦрд╛рдПрдВ, рдФрд░ рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВред Crontab рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг:
crontab -e # crontab -l # crontab -r # crontab path/to/file.crontab #
crontab -e
рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдорд╛рдирдХ EDITOR
рдкрд░реНрдпрд╛рд╡рд░рдг EDITOR
рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ:
# - # # , * * * * * /path/to/exec -a -b -c # , 10- 10 * * * * /path/to/exec -a -b -c # , 10- 10 2 * * * /path/to/exec -a -b -c > /tmp/cron-job-output.log
рдкрд╣рд▓реЗ рдкрд╛рдВрдЪ рд░рд┐рдХреЙрд░реНрдб рдлрд╝реАрд▓реНрдб: рдорд┐рдирдЯ [1..60], рдШрдВрдЯреЗ [0..23], рдорд╣реАрдиреЗ рдХреЗ рджрд┐рди [1..31], рдорд╣реАрдиреЗ [1..12], рд╕рдкреНрддрд╛рд╣ рдХреЗ рджрд┐рди [0..6], рдЬрд╣рд╛рдВ 0 - рд░рд╡рд┐рд╡рд╛рд░ред рдЕрдВрддрд┐рдо, рдЫрдард╛, рдлрд╝реАрд▓реНрдб рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдорд╛рдирдХ рдХрдорд╛рдВрдб рджреБрднрд╛рд╖рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкрд╣рд▓реЗ рдкрд╛рдБрдЪ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ, рдорд╛рдиреЛрдВ рдХреЛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
# , 1,10 * * * * /path/to/exec -a -b -c
рдпрд╛ рдПрдХ рд╣рд╛рдЗрдлрд╝рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ:
# , 0-9 * * * * /path/to/exec -a -b -c
рдХрд╛рд░реНрдп рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╣реБрдВрдЪ POSIX рдлрд╝рд╛рдЗрд▓реЛрдВ cron.allow рдФрд░ cron.deny рдореЗрдВ рдХреНрд░рдорд╢рдГ рд╡рд┐рдирд┐рдпрдорд┐рдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХреНрд░рдорд╢рдГ рд╕реВрдЪреА, crontab рдХреЗ рдЙрдкрдпреЛрдЧ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред рдорд╛рдирдХ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЛ рд╡рд┐рдирд┐рдпрдорд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо, рдХрдо рд╕реЗ рдХрдо рдЪрд╛рд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП:
- рдШрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╣реЛрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╣реИред
- LOGNAME - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рдиред
- PATH рд╡рд╣ рдкрде рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдорд╛рдирдХ рдкреНрд░рдгрд╛рд▓реА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рдвреВрдВрдврдирд╛ рд╣реИред
- рд╢реЗрд▓ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╢реЗрд▓ рдХрд╛ рдорд╛рд░реНрдЧ рд╣реИред
рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ POSIX рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЗрди рдЪрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВред
рдмреЗрд╕реНрдЯрд╕реЗрд▓рд░ - рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди 3.0pl1
рд▓реЛрдХрдкреНрд░рд┐рдп рдХреНрд░реЛрди рд╡реЗрд░рд┐рдПрдВрдЯ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рдЬ рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди 3.0pl1 рд╣реИ, рдЬрд┐рд╕реЗ 1992 рдХреЗ comp.sources.unix рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣рдо рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди рджреЛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ (рдХреНрд░реЛрди рдФрд░ рдХреНрд░реЙрд╕реНрдЯреИрдм) рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдбреЗрдорди рд╕рд┐рд╕реНрдЯрдо рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯреЗрдмрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдЯреИрдм рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ
рд╕реБрдкрд░рдпреВрдЬрд╝рд░ рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓ / etc / crontab рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдЯреЗрдмрд▓ рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЫрдард╛ рдХреЙрд▓рдо рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдирд╛рдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдУрд░ рд╕реЗ рдХрд╛рд░реНрдп рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
# vlad * * * * * vlad /path/to/exec
рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓ / var / cron / tabs / username рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм crontab рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдпреЗ рдлрд╛рдЗрд▓реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред
Crontab рдХреЗ рдЙрдкрдпреЛрдЧ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ / var / cron / allow рдФрд░ / var / cron / deny рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкрдВрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕
POSIX crontab рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдкреЙрд▓ рд╡рд┐рдХреНрд╕реА рдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдХрдИ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╕рдВрд╢реЛрдзрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдПрдХ рдирдпрд╛ рдЯреЗрдмрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЧрдпрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд╛рдо (рд╕реЛрдо, рдФрд░ рдЗрд╕реА рддрд░рд╣) рджреНрд╡рд╛рд░рд╛ рд╕рдкреНрддрд╛рд╣ рдпрд╛ рдорд╣реАрдиреЛрдВ рдХреЗ рджрд┐рдиреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
# * * * Jan Mon,Tue /path/to/exec
рдЖрдк рдЙрд╕ рдЪрд░рдг рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рд╣реИрдВ:
# */2 * * * Mon,Tue /path/to/exec
рдХрджрдо рдФрд░ рдЕрдВрддрд░рд╛рд▓ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
# 0-10/2 * * * * /path/to/exec
рдирд┐рдпрдорд┐рдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рд╡рд┐рдХрд▓реНрдк рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ (рд░рд┐рдмреВрдЯ, рд╡рд╛рд░реНрд╖рд┐рдХ, рд╡рд╛рд░реНрд╖рд┐рдХ, рдорд╛рд╕рд┐рдХ, рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ, рджреИрдирд┐рдХ, рдордзреНрдпрд░рд╛рддреНрд░рд┐, рдШрдВрдЯрд╛):
# @reboot /exec/on/reboot # @daily /exec/daily # @hourly /exec/daily
рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдкрд░реНрдпрд╛рд╡рд░рдг
рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди рдЖрдкрдХреЛ рд░рдирд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
USER, LOGNAME рдФрд░ HOME рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗрд╡рд▓ рдбреЗрдореЙрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдкрд╛рд╕рд╡рд╛рд░реНрдб рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВред PATH рдЪрд░ рдХрд╛ рдорд╛рди "/ usr / bin: / bin" рдФрд░ SHELL рдХрд╛ рдорд╛рди "/ bin / sh" рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред LOGNAME рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдЪрд░ рдХреЗ рдорд╛рди рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреБрдЫ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╢реЗрд▓ рдФрд░ рд╣реЛрдо) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд░реЛрди рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдп рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╢ рдХреА рдмрдЬрд╛рдп рдмреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
SHELL=/bin/bash HOME=/tmp/ # exec bash- /tmp/ * * * * * /path/to/exec
рдЕрдВрдд рдореЗрдВ, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рднреА рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ (рдХреНрд░реЛрди рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рдирд┐рдВрдЧ рдХрд╛рд░реНрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
Crontab рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП VISUAL рдпрд╛ EDITOR рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЗрди рдЪрд░ рдХреЛ рдЙрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреНрд░реЙрдиреНрдм рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ "/ usr / ucb / vi" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (ucb рд╕рдВрднрд╡рддрдГ рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп, рдмрд░реНрдХрд▓реЗ рд╣реИ)ред
рдбреЗрдмрд┐рдпрди рдФрд░ рдЙрдмрдВрдЯреВ рдкрд░ рдХреНрд░реЛрди
рдбреЗрдмрд┐рдпрди рдФрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди рд╕рдВрд╕реНрдХрд░рдг 3.0pl1 рдХрд╛ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИред рддрд╛рд▓рд┐рдХрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд╣реА рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди рд╣реИред рд╕рдмрд╕реЗ рдмрдбрд╝реА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ: syslog , SELinux, рдФрд░ PAM рд╕рдорд░реНрдердиред
рдХрдо рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп, рд▓реЗрдХрд┐рди рдареЛрд╕ рдкрд░рд┐рд╡рд░реНрддрди - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рд╕реНрдерд╛рдиред
Debian рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / var / spool / cron / crontabs рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ, рд╕рд┐рд╕реНрдЯрдо рддрд╛рд▓рд┐рдХрд╛ рдЕрднреА рднреА / etc / crontab рдореЗрдВ рд╣реИред рдбреЗрдмрд┐рдпрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯрд╛рд╕реНрдХ рдЯреЗрдмрд▓ рдХреЛ /etc/cron.d рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕реЗ рдХреНрд░реЛрди рдбреЗрдореЙрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣реБрдВрдЪ рдирд┐рдпрдВрддреНрд░рдг /etc/cron.allow рдФрд░ /etc/cron.deny рдлрд╝рд╛рдЗрд▓реЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢реЗрд▓ / рдмрд┐рди / рд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреА рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢реЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреЗрдмрд┐рдпрди рдПрдХ рдЫреЛрдЯрд╛ рдкреЛрд╕рд┐рдХреНрд╕-рд╕рдВрдЧрдд рдбреИрд╢ рд╢реЗрд▓ рдирд┐рднрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдЧреИрд░-рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдореЛрдб рдореЗрдВ) рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рддрд╛ рд╣реИред
рдбреЗрдмрд┐рдпрди рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХреНрд░реЛрди рдХреЛ рд╕рд┐рд╕реНрдЯрдордб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд▓реЙрдиреНрдЪ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ /lib/systemd/system/cron.service рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реЗрд╡рд╛ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдХрд┐рд╕реА рднреА рдорд╣реАрди рдХрд╛рд░реНрдп рдХрд╛ рдкреНрд░рдмрдВрдзрди рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХреНрд░рд╛рдЙрдирдЯ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд░реЗрдбрд╣реИрдЯ, рдлреЗрдбреЛрд░рд╛ рдФрд░ рд╕реЗрдВрдЯреЛрд╕ рдкрд░ рдХреНрд░реЛрдиреА
рдХреНрд░реЛрдиреА - рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди рд╕рдВрд╕реНрдХрд░рдг 4.1 рдХрд╛ рдХрд╛рдВрдЯрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдбреЗрдмрд┐рдпрди рдореЗрдВ, рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реБрдЖ, рд▓реЗрдХрд┐рди PAM рдФрд░ SELinux рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛, inotify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╣реИ: рд╕рд┐рд╕реНрдЯрдо рдЯреЗрдмрд▓ / etc / crontab рдореЗрдВ рд╣реИ, рд╕рдВрдХреБрд▓ рдиреЗ рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ /etc/cron.d рдореЗрдВ рд░рдЦрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯреЗрдмрд▓ / var / spool / cron / crontabs рдореЗрдВ рд╣реИрдВред
рдбреЗрдорди рд╕рд┐рд╕реНрдЯрдордб рдХреЗ рддрд╣рдд рдЪрд▓рддрд╛ рд╣реИ, рд╕реЗрд╡рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ /lib/systemd/system/crond.service рд╣реИред
рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, Red Hat рдЬреИрд╕реЗ рд╡рд┐рддрд░рдг рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ / рдмрд┐рди / рд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рднреВрдорд┐рдХрд╛ рдорд╛рдирдХ рдмреИрд╢ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬрдм рдХреНрд░реЛрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ / рдмрд┐рди / рд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреЙрд╢-рд╕рдВрдЧрдд рдореЛрдб рдореЗрдВ рдмреИрд╢ рд╢реЗрд▓ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЧреИрд░-рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╣реАрдВ рдкрдврд╝рддрд╛ рд╣реИред
SLES рдФрд░ рдЦреБрд▓реЗ рдореЗрдВ cronie
рдЬрд░реНрдорди рдПрд╕рдПрд▓рдИрдПрд╕ рд╡рд┐рддрд░рдг рдФрд░ рдЗрд╕рдХреЗ рдУрдкрдирд╕рд┐рд╡ рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдХ рд╣реА рдХреНрд░реЛрдиреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдбреЗрдорди рд╕рд┐рд╕реНрдЯрдордб рдХреЗ рддрд╣рдд рднреА рдЪрд▓рддрд╛ рд╣реИ, рд╕реЗрд╡рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ /usr/lib/systemd/system/cron.service рдореЗрдВ рд╣реИред рд╡рд┐рдиреНрдпрд╛рд╕: / etc / crontab, /etc/cron.d, / var / spool / cron / tabsред рдЬреИрд╕реЗ / рдмрд┐рди / рд╢ рдПрдХ рд╣реА рдмреИрд╢ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, POSIX- рд╕рдВрдЧрдд рдЧреИрд░-рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдореЛрдб рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди рдбрд┐рд╡рд╛рдЗрд╕
рдХреНрд░реЛрди рдХреЗ рдЖрдзреБрдирд┐рдХ рд╡рдВрд╢рдЬ рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЙрдиреНрд╣реЛрдВрдиреЗ рдирдИ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЧрдбрд╝рдмрдбрд╝ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкреЙрд▓ рд╡рд┐рдХреНрд╕реА рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рдХреНрд░реЛрди рд╕реНрд░реЛрдд рдХреЛрдб рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд╢реА рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреНрд░реЛрди рд╡рд┐рдХрд╛рд╕ рдХреА рджреЛрдиреЛрдВ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреНрд░реЛрди рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ - рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди 3.031ред рдореИрдВ ifdefs рдХреЛ рд╣рдЯрд╛рдХрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рджреВрдВрдЧрд╛ рдЬреЛ рдорд╛рдзреНрдпрдорд┐рдХ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЫреЛрдбрд╝рдиреЗ рдореЗрдВ рдЬрдЯрд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред
рджрд╛рдирд╡ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреНрд░рд╛рд░рдВрднред
- рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдПрдХрддреНрд░ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
- рдореБрдЦреНрдп рдХреНрд░реЛрди рд▓реВрдк рдСрдкрд░реЗрд╢рдиред
- рдХрд╛рд░реНрдп рдХрд╛ рд╢реБрднрд╛рд░рдВрднред
рдХреНрд░рдо рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВред
рдкреНрд░рд╛рд░рдВрдн
рдЬрдм рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рддрд░реНрдХреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреНрд░реЛрди SIGCHLD рдФрд░ SIGHUP рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдмрдЪреНрдЪрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд▓реЙрдЧ рдлрд╛рдЗрд▓ рдХреЗ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ:
signal(SIGCHLD, sigchld_handler); signal(SIGHUP, sighup_handler);
рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреНрд░реЛрди рдбреЗрдорди рд╣рдореЗрд╢рд╛ рдЕрдХреЗрд▓реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╕реБрдкрд░рдпреБрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдХреНрд░реЛрди рдореБрдЦреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗред рдирд┐рдореНрди рдХреЙрд▓ рдбреЗрдореЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд▓реЙрдХ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╣реА рд╣реИ, рдФрд░ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдореБрдЦреНрдп рдПрдХ рдореЗрдВ рдмрджрд▓ рджреЗрдВ:
acquire_daemonlock(0); set_cron_uid(); set_cron_cwd();
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрде рд╕реЗрдЯ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
setenv("PATH", _PATH_DEFPATH, 1);
рдлрд┐рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ "demonized" рд╣реИ: рдпрд╣ рдХрд╛рдВрдЯрд╛ рдмреБрд▓рд╛рдХрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдПрдХ рдмрдЪреНрдЪреЗ рдХреА рдирдХрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕рддреНрд░ (рдХреЙрд▓рд┐рдВрдЧ рд╕реЗрдЯ)ред рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдХреЛрдИ рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдФрд░ рдпрд╣ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддреА рд╣реИ:
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 рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рд┐рд╕реНрдЯрдо crontab рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╣реАрдВ рдмрджрд▓реА рдЧрдИ рд╣реИ, рддреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд╣реИред рдЕрдиреНрдпрдерд╛, рдПрдХ рдирдИ рдХрд╛рд░реНрдп рд╕реВрдЪреА рдмрдирдиреЗ рд▓рдЧрддреА рд╣реИред
рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛:
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; } }
рдпрд╣рд╛рдВ, рдпрд╛ рддреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ (рдкреНрд░рдкрддреНрд░ VAR = рдорд╛рди рдХреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ) load_env / env_set рдлрд╝рдВрдХреНрд╢рдВрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдпрд╛ load_entry рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдп рд╡рд┐рд╡рд░рдг (* * * * * / path / to / execute) рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
Load_entry рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдИ рдЧрдИ рдПрдВрдЯреНрд░реА рдпреВрдирд┐рдЯ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪреА рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реА, рд╕рдордп рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдПрдХ рд▓рдВрдмрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдФрд░ рдХрд╛рд░реНрдп рд▓реЙрдиреНрдЪ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЕрдзрд┐рдХ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:
e->uid = pw->pw_uid; e->gid = pw->pw_gid; 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); } sprintf(envstr, "%s=%s", "LOGNAME", pw->pw_name); e->envp = env_set(e->envp, envstr);
рдореБрдЦреНрдп рдЪрдХреНрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореБрдЦреНрдп рдЪрдХреНрд░
рд╕рдВрд╕реНрдХрд░рдг 7 рдпреВрдирд┐рдХреНрд╕ рд╕реЗ рдореВрд▓ рдХреНрд░реЛрди рдиреЗ рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛: рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдореИрдВрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рд╛, рд╕реБрдкрд░ рдорд┐рдирдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд╛рд▓реВ рдорд┐рдирдЯ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд▓рд╛рдпрд╛ рдФрд░ рдЕрдЧрд▓реЗ рдорд┐рдирдЯ рдХреА рд╢реБрд░реБрдЖрдд рддрдХ рд╕реЛ рдЧрдпрд╛ред рдкреБрд░рд╛рдиреА рдорд╢реАрдиреЛрдВ рдкрд░ рдЗрд╕ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
SysV рдореЗрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдорди рдпрд╛ рддреЛ рдЕрдЧрд▓реЗ рдорд┐рдирдЯ рддрдХ рд╕реЛ рдЧрдпрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ 30 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдореЛрдб рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдХрдо рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдЧрдпрд╛ред
рд╡рд┐рдХреНрд╕реА рдХреНрд░реЛрди рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдХрд╛рд░реНрдп рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ 80 рдХреЗ рджрд╢рдХ рдХреЗ рдЕрдВрдд рддрдХ рдорд╛рдирдХ рдпреВрдирд┐рдХреНрд╕ рдорд╢реАрдиреЛрдВ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдереЗ:
load_database(&database); run_reboot_jobs(&database); cron_sync(); while (TRUE) { cron_sleep(); load_database(&database); cron_tick(&database); TargetTime += 60; }
Cron_sleep рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ job_runqueue (рдЧрдгрдирд╛ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╢реБрд░реБрдЖрдд) рдФрд░ do_command (рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрд╛рд░реНрдп рдХреА рд╢реБрд░реБрдЖрдд) рдХрд╣рддрд╛ рд╣реИ, рд╕реАрдзреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЕрдВрддрд┐рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХрд╛рд░реНрдп рдХрд╛ рд╢реБрднрд╛рд░рдВрдн
Do_command рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЕрдЪреНрдЫреА рдпреВрдирд┐рдХреНрд╕ рд╢реИрд▓реА рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрд╛рдВрдЯрд╛ рдХрд░рддрд╛ рд╣реИред рдЕрднрд┐рднрд╛рд╡рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреА рд╣реИ, рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рд░реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реА рд╣реИ:
switch (fork()) { case -1: break; case 0: acquire_daemonlock(1); child_process(e, u); _exit(OK_EXIT); break; default: break; }
Child_process рдореЗрдВ рдмрд╣реБрдд рддрд░реНрдХ рд╣реИ: рдпрд╣ рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реНрд╡рдпрдВ рдкрд░ рдмрд╣рддреА рд╣реИ, рддрд╛рдХрд┐ рдЗрд╕реЗ рддрдм рдореЗрд▓ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХреЗ (рдпрджрд┐ рдХрд╛рд░реНрдп рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ MAILTO рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдФрд░, рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
рдХрд╛рд░реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреВрд╕рд░реЗ рдХрд╛рдВрдЯреЗ рд╕реЗ рдмрдирддреА рд╣реИ:
switch (vfork()) { case -1: exit(ERROR_EXIT); case 0: (void) setsid(); setgid(e->gid); setuid(e->uid); chdir(env_get("HOME", e->envp)); { 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 рдореЗрдВ рдЖрдк рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЦрдкрдд рдХреЛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреНрд░реЙрд╕реНрдЯреИрдм рдХрд┐рдпрд╛ рд╣реИред
рдПрдХ рд╢рдмреНрдж рдореЗрдВ, рдпреВрдирд┐рдХреНрд╕ рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░реЗрдВ, рд╕рд░рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдордВрдЪ рдХреЗ рд▓рд┐рдП рдореИрдирд╛ рдкрдврд╝рдирд╛ рди рднреВрд▓реЗрдВ!