
เบเบฅเบฒเบชเบชเบดเบเบเบฝเบเบงเปเบฒเบเบปเปเบงเปเบกเบเบเบตเปเบกเบตเบเบงเบฒเบกเบชเบธเบเบเปเปเปเบเปเปเบเบดเปเบ. เปเบเบเปเบงเบเปเบงเบฅเบฒเบเปเบฒเบเปเบฒเบกเบฐเบเบฒเบเปเบซเบผเบปเปเบฒเบเบฑเปเบเบเปเปเบกเบตเบเบฑเบเบเบฑเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเบซเบผเบท Unix, เปเบเปเบเบฑเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเปเบเบกเบทเปเบเบตเปเบฎเบนเปเบขเปเบฒเบเปเบเปเบเบญเบเบงเปเบฒ: cron เบเบฐเบเบดเบเบเบฒเบกเปเบงเบฅเบฒเปเบเบเบเบงเบเปเบเบปเบฒ.
เบเบปเบเบเบฐเปเบซเบเบเบเบญเบเบชเบฒเบเบเปเบฒเบชเบฑเปเบเปเบกเปเบเบเบฑเบเบชเบญเบเบเบธเบเบญเปเบญเบเปเบฅเบฐเบงเบฝเบเบชเปเบฒเบฅเบฑเบเบเปเบญเบ. sed, awk, wc, cut เปเบฅเบฐเปเบเบเบเบฒเบเปเบเบปเปเบฒเบญเบทเปเบเปเปเบกเปเบเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเบ scripts เปเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบธเบเปเบกเบทเป. เบเปเบฒเบเบงเบเบซเบผเบฒเบเบเบญเบเบเบงเบเปเบเบปเบฒเบเบทเบเบญเบญเบเปเบเบเปเบเบฑเบเบงเบฝเบเบเบฒเบเบชเปเบฒเบฅเบฑเบ cron, เบเปเบฒเบเบปเบเปเบงเบฅเบฒเปเบเบตเบกเบกเบฒเบเบฒเบ 70s.
เบเปเบญเบเปเบเปเปเบเป cron เบขเปเบฒเบเบเบดเบงเปเบเบตเบเปเบเบฑเบเปเบงเบฅเบฒเบเบปเบเบเบฒเบ, เปเบเบเบเปเปเปเบเปเปเบเบฒเบฐเปเบฅเบดเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ, เปเบเปเบกเบทเปเปเบถเปเบ, เปเบกเบทเปเบญเบเปเบญเบเบเบปเบเบเปเปเบเบดเบเบเบฒเบเปเบเบเบฐเบเบฐเบเบตเปเปเบเป script, เบเปเบญเบเบเบถเปเบเบเบฑเบเบชเบดเบเปเบเบเบดเบเบฒเบฅเบฐเบเบฒเปเบเบดเปเบเปเบซเปเบฅเบฐเบญเบฝเบเบเบงเปเบฒ. เบเบฑเปเบเปเบกเปเบเบงเบดเบเบตเบเบตเปเบเบปเบเบเบงเบฒเบกเบเบตเปเปเบเบตเบเบเบถเปเบ, เปเบฅเบฐเปเบเบเบฐเบเบฐเบเบตเปเบเบฝเบเบกเบฑเบ, เบเปเบญเบเบเบธเปเบเปเบเบตเบเบเบฑเบ POSIX crontab เปเบฅเบฐเบเบปเบงเปเบฅเบทเบญเบ cron เบซเบผเบฑเบเปเปเบเบเบฒเบเปเบเบเบขเบฒเบเบเบตเปเบเบดเบเบปเบก. Linux เปเบฅเบฐเบเบฒเบเบญเบญเบเปเบเบเบเบญเบเบเบฒเบเบชเปเบงเบเบเบญเบเบเบงเบเบกเบฑเบ.
เปเบเบปเปเบฒเปเบเปเบเป Linux เปเบฅเบฐ เปเบฅเปเบเบงเบฝเบ cron เบเป? เบเปเบฒเบเบชเบปเบเปเบเบชเบฐเบเบฒเบเบฑเบเบเบฐเบเบฐเบเบณเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบฅเบฐเบเบปเบ Unix เบเป? เบเปเบฒเปเบเบฑเบเปเบเบงเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเปเปเบขเบนเปเปเบเปเปเบฒเบเบฝเบงเบเบฑเบ!
เปเบเบทเปเบญเปเบ
เบเบปเปเบ เบเบณ เปเบเบตเบเบเบญเบเบเบฐเบเบดเบเบเบฑเบ
เบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเบเบเบฒเบเบเบนเปเปเบเปเบซเบผเบทเบฅเบฐเบเบปเบเปเบเบฑเบเปเบฅเบเบฐเปเบงเบฅเบฒเปเบกเปเบเบกเบตเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบเบเบตเปเบเบฑเบเปเบเบเปเบเบเบธเบเบฅเบฐเบเบปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบ. เบเบฑเปเบเบเบฑเปเบ, เบเบฑเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเปเบเปเบฎเบฑเบเบฎเบนเปเปเบเบดเบเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบเบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบตเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเบงเบเปเบเบปเบฒเบงเบฒเบเปเบเบเปเบฅเบฐเบเบฐเบเบดเบเบฑเบเบงเบฝเบเบเบฒเบเบเบญเบเบชเบนเบเบเบฒเบเปเบเปเบงเบฅเบฒเบเบปเบเบเบฒเบเบเปเบญเบเบซเบเปเบฒเบเบตเป.
เบฅเบฐเบเบปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเปเบฒเบเบเบท Unix เบเบดเบเบเบฒเบกเบเบปเปเบเบเปเบฒเปเบเบตเบเบเบญเบเบเบงเบเปเบเบปเบฒเบเบฑเบเบเบทเบเปเบเบเปเบญเบ Version 7 Unix, เบเบฑเบเบเบฐเบเบฒเปเบเบเบธเบกเบเบต 70 เบเบญเบเบชเบฐเบเบฐเบงเบฑเบเบเบตเปเบเปเบฒเบเบกเบฒเบขเบนเปเบเบตเป Bell Labs, เบฅเบงเบกเบเบฑเบ Ken Thompson เบเบตเปเบกเบตเบเบทเปเบชเบฝเบ. เปเบงเบตเบเบฑเปเบ 7 Unix เบเบฑเบเบฅเบงเบกเปเบญเบปเบฒ cron, เบเบฒเบเบเปเบฅเบดเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบ superuser เปเบเบฑเบเบเบฐเบเปเบฒ.
A cron เบเบตเปเบเบฑเบเบชเบฐเปเบซเบกเบเบปเบเบเบฐเบเบดเปเบกเปเบเปเบเบเบเบฒเบเบเบตเปเบเปเบฒเบเบเบฒเบ, เปเบเปเบงเบดเบเบตเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบญเบเบชเบฐเบเบฑเบเบเบปเปเบเบชเบฐเบเบฑเบเปเบกเปเบเบเปเบฒเบเบเบฒเบเบซเบผเบฒเบ: เบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบทเปเบเบเบถเปเบเบซเบเบถเปเบเบเบฒเบเบต, เบญเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบเบเบตเปเบกเบตเบซเบเปเบฒเบงเบฝเบเบเบฒเบเปเบเบฅเปเบเบฝเบง (/etc/lib/crontab) เปเบฅเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบชเปเบฒเบฅเบฑเบ superuser เบงเบฝเบ เบเบฒเบ เบเบตเป เบเบงเบ เปเบเป เบฎเบฑเบ เบเบฒเบ เบเบฐ เบเบด เบเบฑเบ เปเบ เบเบฑเบ เบเบธ เบเบฑเบ .
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบชเบฐเบเบฑเบเบเบฑเบเบเบธเบเบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบตเปเบเปเบฒเบเบเบฒเบเปเบฅเบฐเปเบเบฑเบเบเบฐเปเบซเบเบเปเบเปเบเบทเบเบชเบฐเบซเบเบญเบเปเบซเปเบเบฑเบเบเบธเบเบฅเบฐเบเบปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบตเปเบเปเบฒเบเบเบท Unix.
เบเปเบฒเบญเบฐเบเบดเบเบฒเบเบเบปเปเบงเปเบเบเบญเบเบฎเบนเบเปเบเบ crontab เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบทเปเบเบเบฒเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบญเบเบเบปเบเบเบฐเปเบซเบเบเปเบเปเบเบทเบเบฅเบงเบกเปเบเบปเปเบฒเปเบเบกเบฒเบเบเบฐเบเบฒเบเบเบปเปเบเบเปเบเบญเบเบฅเบฐเบเบปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบ Unix - POSIX - เปเบเบเบต 1992, เปเบฅเบฐเบเบฑเปเบเบเบฑเปเบ cron เบเบฒเบเบกเบฒเบเบเบฐเบเบฒเบ de facto เปเบเปเบเบฒเบเปเบเบฑเบเบกเบฒเบเบเบฐเบเบฒเบ de jure.
เปเบเบเบต 1987, Paul Vixie, เปเบเปเบชเปเบฒเบซเบผเบงเบเบเบนเปเปเบเป Unix เบเปเบฝเบงเบเบฑเบเบเบงเบฒเบกเบเบฒเบเบเบฐเบซเบเบฒเบเบญเบเปเบเบปเบฒเปเบเบปเปเบฒเบชเปเบฒเบฅเบฑเบ cron, เปเบเปเบญเบญเบเบชเบฐเบเบฑเบเบญเบทเปเบเบเบญเบ daemon เบเบตเปเปเบเปเปเบเบเบฒเบเบเบฑเบเบซเบฒเบเบญเบ cron เปเบเบเบเบฑเปเบเปเบเบตเบกเปเบฅเบฐเบเบฐเบซเบเบฒเบ syntax เบเบญเบเปเบเบฅเปเบเบฒเบเบฐเบฅเบฒเบ.
เบฎเบญเบเบฅเบธเปเบเบเบตเบชเบฒเบกเบเบญเบ Vixie, cron เปเบเปเบเบฒเบเบกเบฒเปเบเบฑเบเปเบเบฃเปเบเบฃเบกเบเบตเปเบชเบญเบเบเปเบญเบเบเบฑเบ POSIX, เปเบฅเบฐเปเบเบฃเปเบเบฃเบกเบกเบตเปเบเบญเบฐเบเบธเบเบฒเบเบเบตเปเบญเบฐเบเบธเบเบฒเบ - เบซเบผเบทเปเบเบเบเบตเปเบเบฐเบเปเปเบกเบตเปเบเบญเบฐเบเบธเบเบฒเบเปเบฅเบตเบ, เบเบปเบเปเบงเบฑเปเบ README: เบเบนเปเบเบฝเบเบเปเปเปเบเปเปเบซเปเบเบฒเบเบฎเบฑเบเบเบฐเบเบฑเบ, เบเบทเปเบเบญเบเบเบนเปเบเบฝเบเบเปเปเบชเบฒเบกเบฒเบเบฅเบถเบเบญเบญเบเปเบเป, เปเบฅเบฐเปเบเบฃเปเบเบฃเบกเบชเบฒเบกเบฒเบเบเบฒเบเปเบเปเบเปเบงเบเบฅเบฐเบซเบฑเบเปเบซเบผเปเบเปเบเบปเปเบฒเบเบฑเปเบ. เบเปเปเบเบณเบเบปเบเปเบซเบผเบปเปเบฒเบเบตเปเปเบเปเบเบดเบชเบนเบเปเบซเปเปเบซเบฑเบเบงเปเบฒเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบเบซเบผเบฑเบเบเบฒเบเบเบญเบเบเบญเบเปเบงเบเบฃเบต, เปเบเบดเปเบเบเบณเบฅเบฑเบเปเบเปเบฎเบฑเบเบเบงเบฒเบกเบเบดเบเบปเบกเปเบเปเบงเบฅเบฒเบเบฑเปเบ, เปเบฅเบฐเบเบฑเปเบเบเบฑเปเบเบเบฒเบเปเบเบเบขเบฒเบเบเบตเปเบชเบณเบเบฑเบเบเบฒเบเบขเปเบฒเบเบเบตเปเปเบเบตเบเบเบถเปเบเปเบเบเบปเปเบเบเบธเบกเบเบต 90. Linux เบเบงเบเปเบเบปเบฒเปเบเปเปเบญเบปเบฒ Vixie cron เปเบเบฑเบ cron เบเบญเบเบฅเบฐเบเบปเบ เปเบฅเบฐ เบเบฑเบเบเบฑเบเบเบฐเบเบฒเบกเบฑเบเบขเบนเป.
เปเบเบเบชเบฐเปเบเบฒเบฐ, Red Hat เปเบฅเบฐ SUSE เบเบงเบกเบเบฑเบเบเบฐเบเบฒ fork เบเบญเบ Vixie cron, cronie, เปเบฅเบฐ Debian ะธ Ubuntu เปเบเป Vixie cron เบชเบฐเบเบฑเบเบเบปเปเบเบชเบฐเบเบฑเบเบเบตเปเบกเบตเบซเบผเบฒเบ patch.
เบเปเบญเบเบญเบทเปเบเปเบปเบ, เปเบซเปเบเบงเบเปเบฎเบปเบฒเบกเบฒเบฎเบนเปเบเบฑเบเบเบฑเบ crontab utility เบเบนเปเปเบเป POSIX เบเปเบญเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบงเบเบชเบญเบเบชเปเบงเบเบเบฐเบซเบเบฒเบ syntax เบเบตเปเบเบณเบชเบฐเปเปเบตเปเบ Vixie cron, เปเบฅเบฐ เบเบฒเบเบเบณเปเบเปเบเบฒเบเบเปเบฝเบเปเบเบเบเบญเบ Vixie cron เปเบเบเบฒเบเปเบเบเบขเบฒเบเบเบตเปเบเบดเบเบปเบก. Linuxเปเบฅเบฐเบชเบธเบเบเปเบฒเบ, เบชเบดเปเบเบเบตเปเปเปเบฒเบชเบปเบเปเบ โ เบเบฒเบเบงเบดเปเบเบฒเบฐเปเบเบเบชเปเบฒเบเบเบญเบ cron daemon.
POSIX crontab
เบเปเบฒ cron เบเบปเปเบเบชเบฐเบเบฑเบเปเบฎเบฑเบเบงเบฝเบเบชเบฐเปเบซเบกเบตเบชเปเบฒเบฅเบฑเบ superuser, เบเบนเปเบเปเบฒเบเบปเบเปเบงเบฅเบฒเบเบตเปเบเบฑเบเบชเบฐเปเบซเบกเบกเบฑเบเบเบฐเบเบฑเบเบเบฒเบเบเบฑเบเบงเบฝเบเบเบฒเบเบเบญเบเบเบนเปเปเบเปเบเบปเปเบงเปเบ, เปเบเบดเปเบเบกเบตเบเบงเบฒเบกเบเบญเบเปเบเปเบฅเบฐเบชเบฐเบเบงเบเบเบงเปเบฒ.
Crons เปเบเปเบเบทเบเบชเบฐเบซเบเบญเบเปเบซเปเปเบเบฑเบเบเบธเบเบเบญเบเบชเบญเบเปเบเบเบเบฒเบ: cron daemon เบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบเปเบฅเบฐเบเบปเบเบเบฐเปเบซเบเบ crontab เบเบตเปเบกเบตเปเบซเปเบเบฑเบเบเบนเปเปเบเป. เบญเบฑเบเบชเบธเบเบเปเบฒเบเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเปเปเบเบเบฒเบเบฐเบฅเบฒเบเบงเบฝเบเบชเบฐเปเบเบฒเบฐเบเบฑเบเบเบนเปเปเบเปเปเบเปเบฅเบฐเบเบปเบเปเบเบฅเบฐเบเบปเบ, เปเบเบเบฐเบเบฐเบเบตเป daemon เปเบเบตเบเบซเบเปเบฒเบงเบฝเบเบเบฒเบเบเบฒเบเบฐเบฅเบฒเบเบเบนเปเปเบเปเปเบฅเบฐเบฅเบฐเบเบปเบ.
ะ เบเบถเบเบเบดเบเปเบฒเบเบญเบ daemon เบเปเปเปเบเปเบเบทเบเบญเบฐเบเบดเบเบฒเบเปเบเบเบฒเบเปเบเบเปเปเบเบฒเบกเปเบฅเบฐเบเบฝเบเปเบเปเปเบเบเบเบฒเบเบเบนเปเปเบเปเปเบเบปเปเบฒเบเบฑเปเบเบเบตเปเปเบเบฑเบเบเบฒเบเบเบฒเบ . เบเบฒเบเบกเบตเบขเบนเปเบเบญเบเบเบปเบเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบตเบเบเบปเบงเบงเบฝเบเบเบฒเบเบเบญเบเบเบนเปเปเบเปเปเบกเปเบ, เปเบเปเบเบญเบ, implied, เปเบเปเบเปเปเปเบเปเบญเบฐเบเบดเบเบฒเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ.
เปเบเบเบเบฒเบเปเบเบซเบฒ crontab utility, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฎเบฑเบเบชเบตเปเบขเปเบฒเบ: เปเบเปเปเบเบเบฒเบเบฐเบฅเบฒเบเบงเบฝเบเบเบญเบเบเบนเปเปเบเปเปเบเบเบฑเบเบเบฒเบเบดเบเบฒเบ, เปเบซเบฅเบเบเบฒเบเบฐเบฅเบฒเบเบเบฒเบเปเบเบฅเป, เบชเบฐเปเบเบเบเบฒเบเบฐเบฅเบฒเบเบงเบฝเบเบเบฒเบเปเบเบเบฐเบเบธเบเบฑเบ, เปเบฅเบฐเบฅเบถเบเบเบฒเบเบฐเบฅเบฒเบเบงเบฝเบ. เบเบปเบงเบขเปเบฒเบเบเบญเบเบงเบดเบเบตเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบ crontab:
crontab -e # ัะตะดะฐะบัะธัะพะฒะฐัั ัะฐะฑะปะธัั ะทะฐะดะฐั
crontab -l # ะฟะพะบะฐะทะฐัั ัะฐะฑะปะธัั ะทะฐะดะฐั
crontab -r # ัะดะฐะปะธัั ัะฐะฑะปะธัั ะทะฐะดะฐั
crontab path/to/file.crontab # ะทะฐะณััะทะธัั ัะฐะฑะปะธัั ะทะฐะดะฐั ะธะท ัะฐะนะปะฐเปเบกเบทเปเบญเบเบทเบเปเบญเบตเปเบ crontab -e เบเบปเบงเปเบเปเปเบเบเบตเปเบฅเบฐเบเบธเปเบงเปเปเบเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบกเบฒเบเบเบฐเบเบฒเบเบเบฐเบเบทเบเปเบเป EDITOR.
เบงเบฝเบโเบเบฒเบโเบเบญเบโเบเบปเบโเปเบญเบโเปเบเปโเบเบทเบโเบญเบฐโเบเบดโเบเบฒเบโเปเบโเบฎเบนเบโเปเบเบโเบเบฑเปเบโเบเปเปโเปเบโเบเบตเปโ:
# ัััะพะบะธ-ะบะพะผะผะตะฝัะฐัะธะธ ะธะณะฝะพัะธัััััั
#
# ะทะฐะดะฐัะฐ, ะฒัะฟะพะปะฝัะตะผะฐั ะตะถะตะผะธะฝััะฝะพ
* * * * * /path/to/exec -a -b -c
# ะทะฐะดะฐัะฐ, ะฒัะฟะพะปะฝัะตะผะฐั ะฝะฐ 10-ะน ะผะธะฝััะต ะบะฐะถะดะพะณะพ ัะฐัะฐ
10 * * * * /path/to/exec -a -b -c
# ะทะฐะดะฐัะฐ, ะฒัะฟะพะปะฝัะตะผะฐั ะฝะฐ 10-ะน ะผะธะฝััะต ะฒัะพัะพะณะพ ัะฐัะฐ ะบะฐะถะดะพะณะพ ะดะฝั ะธ ะธัะฟะพะปัะทัััะฐั ะฟะตัะตะฝะฐะฟัะฐะฒะปะตะฝะธะต ััะฐะฝะดะฐััะฝะพะณะพ ะฟะพัะพะบะฐ ะฒัะฒะพะดะฐ
10 2 * * * /path/to/exec -a -b -c > /tmp/cron-job-output.logเบซเปเบฒเบเบฒเบเบชเบฐเบซเบเบฒเบกเบเปเบฒเบญเบดเบเบเบญเบเบเบฒเบเบเบฑเบเบเบถเบ: เบเบฒเบเบต [1..60], เบเบปเปเบงเปเบกเบ [0..23], เบงเบฑเบเบเบญเบเปเบเบทเบญเบ [1..31], เปเบเบทเบญเบ [1..12], เบกเบทเปเบเบญเบเบญเบฒเบเบดเบ [0. .6], เบเปเบญเบเบเบตเป 0 เปเบกเปเบเบงเบฑเบเบญเบฒเบเบดเบ. เบชเบธเบเบเปเบฒเบ, เบซเบปเบ, เบเบฒเบเบชเบฐเบซเบเบฒเบกเปเบกเปเบเปเบชเบฑเปเบเบเบตเปเบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบเบเบฒเบเบเบฒเบชเบฒเบเปเบฒเบชเบฑเปเบเบกเบฒเบเบเบฐเบเบฒเบ.
เปเบเบซเปเบฒเบเปเบญเบเบเปเปเบกเบนเบเบเปเบฒเบญเบดเบ, เบเปเบฒเบชเบฒเบกเบฒเบเบเบทเบเบฅเบฐเบเบธเปเบงเปเปเบเบเบเปเบงเบเปเบเบทเปเบญเบเปเบฒเบเบเบธเบ:
# ะทะฐะดะฐัะฐ, ะฒัะฟะพะปะฝัะตะผะฐั ะฒ ะฟะตัะฒัั ะธ ะดะตััััั ะผะธะฝััั ะบะฐะถะดะพะณะพ ัะฐัะฐ
1,10 * * * * /path/to/exec -a -b -cเบซเบผเบทเบเปเบงเบเบเบตเบเปเบฒเบ:
# ะทะฐะดะฐัะฐ, ะฒัะฟะพะปะฝัะตะผะฐั ะฒ ะบะฐะถะดัั ะธะท ะฟะตัะฒัั
ะดะตัััะธ ะผะธะฝัั ะบะฐะถะดะพะณะพ ัะฐัะฐ
0-9 * * * * /path/to/exec -a -b -cเบเบนเปเปเบเปเปเบเบปเปเบฒเปเบเบดเบเบเบฒเบเบเปเบฒเบเบปเบเปเบงเบฅเบฒเบงเบฝเบเปเบกเปเบเบเบทเบเบเบงเบเบเบธเบกเปเบ POSIX เปเบเบเปเบเบฅเป cron.allow เปเบฅเบฐ cron.deny, เปเบเบดเปเบเบฅเบฒเบเบเบทเปเบเบนเปเปเบเปเบเบตเปเบกเบตเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบ crontab เปเบฅเบฐเบเบนเปเปเบเปเบเบตเปเบเปเปเบกเบตเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเปเบเบเบเบฒเบ, เบเบฒเบกเบฅเปเบฒเบเบฑเบ. เบกเบฒเบเบเบฐเบเบฒเบเบเปเปเปเบเปเบเปเบฒเบเบปเบเบชเบฐเบเบฒเบเบเบตเปเบเบญเบเปเบเบฅเปเปเบซเบผเบปเปเบฒเบเบตเปเปเบเบเบฒเบเปเบเบเปเปเบเบฒเบก.
เบญเบตเบโเบเบฒเบกโเบกเบฒเบโเบเบฐโเบเบฒเบโ, เบขเปเบฒเบโเบซเบเปเบญเบโเบชเบตเปโเบเบปเบงโเปเบโเบชเบฐโเบเบฒเบโเปเบงเบโเบฅเปเบญเบกโเบเปเบญเบโเปเบเปโเบฎเบฑเบโเบเบฒเบโเบเปเบฒเบโเบเบฒเบโเปเบเบตเบโเปเบเบโเบเบฒเบโ:
- HOME - เปเบเปเบฅเบเบฐเบเปเบฅเบตเปเบฎเบทเบญเบเบเบญเบเบเบนเปเปเบเป.
- LOGNAME โ เปเบเบปเปเบฒโเบชเบนเปโเบฅเบฐโเบเบปเบโเบเบนเปโเปเบเป.
- PATH เปเบกเปเบเปเบชเบฑเปเบเบเบฒเบเบเบตเปเปเบเบปเปเบฒเบชเบฒเบกเบฒเบเบเบญเบเบซเบฒเปเบเบทเปเบญเบเปเบเปเบฅเบฐเบเบปเบเบกเบฒเบเบเบฐเบเบฒเบเปเบเป.
- SHELL โ เปเบชเบฑเปเบเบเบฒเบเปเบเบซเบฒเบเบฒเบเบเบฒเบชเบฒเบเปเบฒเบชเบฑเปเบเบเบตเปเปเบเปเปเบฅเปเบง.
เบเบตเปเบซเบเปเบฒเบชเบฑเบเปเบเบ, POSIX เปเบงเบปเปเบฒเบเปเปเบกเบตเบซเบเบฑเบเบเปเบฝเบงเบเบฑเบเบเปเบญเบเบเบตเปเบเปเบฒเบชเปเบฒเบฅเบฑเบเบเบปเบงเปเบเปเบซเบผเบปเปเบฒเบเบตเปเบกเบฒเบเบฒเบ.
เบเบฒเบเบเบตเบเบตเปเบชเบธเบ - Vixie cron 3.0pl1
เบเบฑเบเบเบฐเบเบธเบฅเบธเบเบเบปเปเบงเปเบเบเบญเบเบเบปเบงเปเบ cron เบเบตเปเบเบดเบเบปเบกเปเบกเปเบ Vixie cron 3.0pl1, เบเปเบฒเบชเบฐเปเบซเบเบตเปเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบฒเบเปเบเบชเบฐเบเบต comp.sources.unix เปเบเบเบต 1992. เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบดเบเบฒเบฅเบฐเบเบฒเบฅเบฑเบเบชเบฐเบเบฐเบเบปเปเบเบเปเบเบญเบเบชเบฐเบเบฑเบเบเบตเปเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบตเปเบกเปเบเบตเบก.
Vixie cron เบกเบฒเปเบเบชเบญเบเปเบเบเบเบฒเบ (cron เปเบฅเบฐ crontab). เบเบฒเบกเบเบปเบเบเบฐเบเบด, daemon เปเบกเปเบเบฎเบฑเบเบเบดเบเบเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบญเปเบฒเบเปเบฅเบฐเปเบฅเปเบเบงเบฝเบเบเบฒเบเบเบฒเบเบเบฒเบเบฐเบฅเบฒเบเบงเบฝเบเบเบฒเบเบเบญเบเบฅเบฐเบเบปเบเปเบฅเบฐเบเบฒเบเบฐเบฅเบฒเบเบงเบฝเบเบเบฒเบเบเบญเบเบเบนเปเปเบเปเบชเปเบงเบเบเบธเบเบเบปเบ, เปเบฅเบฐเบเบปเบเบเบฐเปเบซเบเบ crontab เปเบกเปเบเบฎเบฑเบเบเบดเบเบเบญเบเปเบเบเบฒเบเปเบเปเปเบเบเบฒเบเบฐเบฅเบฒเบเบเบนเปเปเบเป.
เบเบฒเบเบฐเบฅเบฒเบเบงเบฝเบเปเบฅเบฐเปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒ
เบเบฒเบเบฐเบฅเบฒเบเบงเบฝเบเบเบฒเบ superuser เปเบกเปเบเบขเบนเปเปเบ /etc/crontab. syntax เบเบญเบเบเบฒเบเบฐเบฅเบฒเบเบฅเบฐเบเบปเบเบเบปเบเบเบฑเบเบเบฑเบ syntax เบเบญเบ Vixie cron, เบเบปเบเปเบงเบฑเปเบเบงเปเบฒเบเปเบฅเปเบฒเบเบต VI เปเบเบกเบฑเบเบเบตเปเปเบซเปเปเบซเบฑเบเบเบทเปเบเบญเบเบเบนเปเปเบเปเบเบฒเบเปเบเปเบเบฒเบเปเบเบตเบเบเบปเบงเบเบญเบเบงเบฝเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบง:
# ะะฐะฟััะบะฐะตััั ะตะถะตะผะธะฝััะฝะพ ะพั ะฟะพะปัะทะพะฒะฐัะตะปั vlad
* * * * * vlad /path/to/execเบเบฒเบเบฐเบฅเบฒเบเบงเบฝเบเบเบฒเบเบเบญเบเบเบนเปเปเบเปเบเบปเบเบเบฐเบเบดเปเบกเปเบเบขเบนเปเปเบ /var/cron/tabs/username เปเบฅเบฐเปเบเป syntax เบเบฝเบงเบเบฑเบ. เปเบกเบทเปเบญเบเปเบฒเบเปเบญเบตเปเบเปเบเป crontab utility เปเบเบฑเบเบเบนเปเปเบเป, เปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเปเบเบฅเปเบเบตเปเบเบทเบเบเบฑเบเปเบเป.
เบฅเบฒเบเบเบทเปเบเบนเปเปเบเปเบเบตเปเบกเบตเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบ crontab เปเบกเปเบเบเบทเบเบเบฑเบเบเบฒเบเบขเบนเปเปเบเปเบเบฅเป /var/cron/allow เปเบฅเบฐ /var/cron/deny, เบเปเบญเบเบเบตเปเบเปเบฒเบเบเบฝเบเปเบเปเบเปเบญเบเบเบฒเบเปเบชเปเบเบทเปเบเบนเปเปเบเปเปเบเปเบเบงเปเบเบเบเปเบฒเบเบซเบฒเบ.
syntax เบเบฐเบซเบเบฒเบ
เปเบกเบทเปเบญเบเบฝเบเบเบฝเบเบเบฑเบ POSIX crontab, เบเบฒเบเปเบเปเปเบเบเบญเบ Paul Vixey เบเบฐเบเบญเบเบเปเบงเบเบเบฒเบเบเบฑเบเปเบเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบซเบผเบฒเบเบเปเป syntax เบเบญเบเบเบฒเบเบฐเบฅเบฒเบเบงเบฝเบเบเบฒเบเบเบญเบเบเบปเบเบเบฐเปเบซเบเบ.
syntax เบเบฒเบเบฐเบฅเบฒเบเปเบซเบกเปเปเบเปเบเบฒเบเปเบเบฑเบเบเบตเปเบกเบตเบขเบนเป: เบเบปเบงเบขเปเบฒเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเบเบปเบเบกเบทเปเบเบญเบเบญเบฒเบเบดเบเบซเบผเบทเปเบเบทเบญเบเปเบเบเบเบทเป (เบเบฑเบ, เบญเบฑเบเบเบฒเบ, เปเบฅเบฐเบญเบทเปเบเป):
# ะะฐะฟััะบะฐะตััั ะตะถะตะผะธะฝััะฝะพ ะฟะพ ะฟะพะฝะตะดะตะปัะฝะธะบะฐะผ ะธ ะฒัะพัะฝะธะบะฐะผ ะฒ ัะฝะฒะฐัะต
* * * Jan Mon,Tue /path/to/execเบเปเบฒเบโเบชเบฒโเบกเบฒเบโเบฅเบฐโเบเบธโเบเบฑเปเบโเบเบญเบโเบเบตเปโเบงเบฝเบโเบเบฒเบโเบเบตเปโเปเบเปโเบฎเบฑเบโเบเบฒเบโเปเบเบตเบโ:
# ะะฐะฟััะบะฐะตััั ั ัะฐะณะพะผ ะฒ ะดะฒะต ะผะธะฝััั
*/2 * * * Mon,Tue /path/to/execเบเบฑเปเบเบเบญเบ เปเบฅเบฐเปเบฅเบเบฐเบซเปเบฒเบเบชเบฒเบกเบฒเบเบเบฐเบชเบปเบกเบเบฑเบเปเบเป:
# ะะฐะฟััะบะฐะตััั ั ัะฐะณะพะผ ะฒ ะดะฒะต ะผะธะฝััั ะฒ ะฟะตัะฒัั
ะดะตัััั ะผะธะฝัั ะบะฐะถะดะพะณะพ ัะฐัะฐ
0-10/2 * * * * /path/to/execเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเปเบเบปเปเบฒเปเบเปเบเปเบเบฑเบ syntax เบเบปเบเบเบฐเบเบดเปเบกเปเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ (reboot, เบเบต, เบเบต, เปเบเบทเบญเบ, เบญเบฒเบเบดเบ, เบเบฐเบเปเบฒเบงเบฑเบ, เปเบงเบฅเบฒเบเปเบฝเบเบเบทเบ, เบเบปเปเบงเปเบกเบ):
# ะะฐะฟััะบะฐะตััั ะฟะพัะปะต ะฟะตัะตะทะฐะณััะทะบะธ ัะธััะตะผั
@reboot /exec/on/reboot
# ะะฐะฟััะบะฐะตััั ัะฐะท ะฒ ะดะตะฝั
@daily /exec/daily
# ะะฐะฟััะบะฐะตััั ัะฐะท ะฒ ัะฐั
@hourly /exec/dailyเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฒเบเบเบฐเบเบดเบเบฑเบเบงเบฝเบเบเบฒเบ
Vixie cron เบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฝเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบตเปเปเบเปเปเบเป.
เบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก USER, LOGNAME เปเบฅเบฐ HOME เบเปเปเบเบฝเบเปเบเปเบชเบฐเบซเบเบญเบเปเบซเปเปเบเบ daemon, เปเบเปเบเบทเบเปเบญเบปเบฒเบกเบฒเบเบฒเบเปเบเบฅเป. . เบเบปเบงเปเบ PATH เบเบทเบเบเบฑเปเบเปเบเบฑเบ "/usr/bin:/bin" เปเบฅเบฐเบเบปเบงเปเบ SHELL เบเบทเบเบเบฑเปเบเปเบเบฑเบ "/bin/sh". เบเปเบฒเบเบญเบเบเบปเบงเปเบเบเบฑเบเบซเบกเบปเบเบเบปเบเปเบงเบฑเปเบ LOGNAME เบชเบฒเบกเบฒเบเบเปเบฝเบเปเบเบเปเบเปเปเบเบเบฒเบเบฐเบฅเบฒเบเบเบนเปเปเบเป.
เบเบฒเบเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก (เปเบเบเบชเบฐเปเบเบฒเบฐ SHELL เปเบฅเบฐ HOME) เปเบกเปเบเปเบเปเปเบเบ cron เบเบปเบงเบกเบฑเบเปเบญเบเปเบเบทเปเบญเปเบฎเบฑเบเบงเบฝเบ. เบเบตเปเปเบกเปเบเบชเบดเปเบเบเบตเปเปเบเป bash เปเบเบ sh เบกเบฒเบเบเบฐเบเบฒเบเปเบเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบเบงเบฝเบเบเบฒเบเบเบตเปเบเปเบฒเบซเบเบปเบเปเบญเบเบญเบฒเบเบเบฐเปเบเบดเปเบเบเบทเบงเปเบฒ:
SHELL=/bin/bash
HOME=/tmp/
# exec ะฑัะดะตั ะทะฐะฟััะตะฝ bash-ะตะผ ะฒ /tmp/
* * * * * /path/to/execเปเบเบเบตเปเบชเบธเบ, เบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฑเบเบซเบกเบปเบเบเบตเปเบเปเบฒเบเบปเบเปเบงเปเปเบเบเบฒเบเบฐเบฅเบฒเบ (เปเบเปเปเบเบ cron เบซเบผเบทเบเปเบญเบเบเบฒเบเปเบเบเบเบฐเบเบงเบเบเบฒเบ) เบเบฐเบเบทเบเบชเบปเปเบเบเบฑเบเบงเบฝเบเบเบฒเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบ.
เปเบเบทเปเบญเปเบเปเปเบเปเบเบฅเป, crontab เปเบเปเบเบปเบงเปเบเปเปเบเบเบตเปเบฅเบฐเบเบธเปเบงเปเปเบเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก VISUAL เบซเบผเบท EDITOR. เบเปเบฒเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบตเป crontab เบเบทเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเปเปเบเปเบเปเบฒเบเบปเบเบเบปเบงเปเบเปเบซเบผเบปเปเบฒเบเบตเป, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ "/usr/ucb/vi" เบเบทเบเบเปเบฒเปเบเป (ucb เปเบกเปเบเบญเบฒเบเบเบฐเปเบเบฑเบเบกเบฐเบซเบฒเบงเบดเบเบฐเบเบฒเปเบฅเบเบฒเบฅเบดเบเปเปเบเบ, Berkeley).
เบเบฃเบญเบเบญเบดเบ Debian ะธ Ubuntu
เบเบฑเบเบเบฑเบเบเบฐเบเบฒ Debian เปเบฅเบฐ เบเบฒเบเปเบเบเบขเบฒเบเบญเบฐเบเบธเบเบฑเบเปเบเปเบเบทเบเบเปเบญเบเบญเบญเบเบกเบฒ Vixie cron เบฎเบธเปเบ 3.0pl1. เบเปเปเบกเบตเบเบงเบฒเบกเปเบเบเบเปเบฒเบเปเบ syntax เบเบญเบเปเบเบฅเปเบเบฒเบเบฐเบฅเบฒเบ; เบชเปเบฒเบฅเบฑเบเบเบนเปเปเบเปเบกเบฑเบเปเบกเปเบ Vixie cron เบเบฝเบงเบเบฑเบ. เบเบธเบเบเบฐเบชเบปเบกเบเบฑเบเปเบซเบกเปเบเบตเปเปเบซเบเปเบเบตเปเบชเบธเบ: เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ , ะธ .
เบชเบฑเบเปเบเบเปเบซเบฑเบเบซเบเปเบญเบ, เปเบเปเบเบฒเบเบเปเบฝเบเปเบเบเบเบตเปเปเบซเบฑเบเปเบเปเบเบฑเบเปเบเบเบเบฐเบเบญเบเบกเบตเบชเบฐเบเบฒเบเบเบตเปเบเบญเบเปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบฅเบฐเบเบฒเบเบฐเบฅเบฒเบเบงเบฝเบ.
เบเบฒเบเบฐเบฅเบฒเบเบเบตเปเบเบณเบเบปเบเปเบญเบเปเบ Debian เบเบฑเปเบเบขเบนเปเปเบเปเบเปเบฅเบเบฐเบเปเบฅเบต /var/spool/cron/crontabs, เบเบฒเบเบฐเบฅเบฒเบเบฅเบฐเบเบปเบเบเบฑเบเบขเบนเปเบเบตเปเบเบฑเปเบ - เปเบ /etc/crontab. เบชเบฐเปเบเบฒเบฐเปเบเบฑเบเปเบเบฑเบ Debian เบเบฒเบเบฐเบฅเบฒเบเปเปเบฒเบงเบฝเบเบเบทเบเบงเบฒเบเปเบงเปเปเบ /etc/cron.d, เบเปเบญเบเบเบตเป daemon cron เบญเปเบฒเบเบเบงเบเบกเบฑเบเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ. เบเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบญเบเบเบนเปเปเบเปเบเบทเบเบเบงเบเบเบธเบกเปเบเบเปเบเบฅเป /etc/cron.allow เปเบฅเบฐ /etc/cron.deny.
shell เบเบณเบชเบฑเปเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฑเบเบเบปเบเปเบเบฑเบ /bin/sh, เปเบเบดเปเบเปเบเปเปเบ Debian เปเบเบทเบญเบเบเปเบญเบเปเบเบตเปเปเบเบปเปเบฒเบเบฑเบเปเบเปเบเบฑเบ POSIX เบเบฐเบเบฒเบเบปเบเบเบถเปเบ , เปเบเบตเบเบเบปเบงเปเบเบเบเปเปเบกเบตเบเบฒเบเบญเปเบฒเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเป (เปเบเปเบซเบกเบเบเบตเปเบเปเปเบกเบตเบเบฒเบเปเบเปเบเบญเบ).
Cron เปเบญเบเปเบเบฅเบธเปเบเบฅเปเบฒเบชเบธเบ Debian เบกเบฑเบเบเบทเบเปเบเบตเบเปเบเปเบเปเบฒเบ systemd, เปเบฅเบฐเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบเบกเบฑเบเบชเบฒเบกเบฒเบเบเบปเบเปเบเปเปเบ /lib/systemd/system/cron.service. เบเปเปเบกเบตเบซเบเบฑเบเบเบดเปเบชเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบ; เบเบฒเบเบเบฑเบเบเบฒเบเปเปเบฒเบงเบฝเบเบเบตเปเบฅเบฐเบญเบฝเบเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเบเปเบฒเบเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบตเปเบเบฐเบเบฒเบเปเบเบเบเบปเบเปเบ crontab เบเบญเบเปเบเปเบฅเบฐเบเบปเบ.
เปเบเบทเปเบญเบเบชเบฐเปเบดเบเปเบ RedHat, Fedora เปเบฅเบฐ CentOS
โ เบชเปเบญเบกเบเบญเบ Vixie cron เปเบงเบตเบเบฑเบ 4.1. เบเบทเบเบฑเบเปเบ Debian, เปเบงเบเบฒเบเบญเบเบเปเปเปเบเปเบเปเบฝเบเปเบเบ, เปเบเปเบเบฒเบเบฎเบญเบเบฎเบฑเบ PAM เปเบฅเบฐ SE เปเบเปเบเบทเบเปเบเบตเปเบกเปเบเบปเปเบฒเบกเบฒเปเบฅเปเบงLinux, เปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบเบธเปเบก, เบเบดเบเบเบฒเบกเบเบงเบเบเบฒเปเบเบฅเปเปเบเบเปเบเป inotify เปเบฅเบฐเบเบธเบเบชเบปเบกเบเบฑเบเบญเบทเปเบเป.
เบเบฒเบเบเบฑเปเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเปเบกเปเบเบขเบนเปเปเบเบชเบฐเบเบฒเบเบเบตเปเบเบปเบเบเบฐเบเบด: เบเบฒเบเบฐเบฅเบฒเบเบฅเบฐเบเบปเบเบขเบนเปเปเบ /etc/crontab, packages เบงเบฒเบเบเบฒเบเบฐเบฅเบฒเบเบเบญเบเบเบงเบเปเบเบปเบฒเปเบ /etc/cron.d, เบเบฒเบเบฐเบฅเบฒเบเบเบนเปเปเบเปเปเบเบปเปเบฒเปเบเปเบ /var/spool/cron/crontabs.
daemon เบเปเบฒเปเบเบตเบเบเบฒเบเบเบฒเบเปเบเปเบเบฒเบเบเบงเบเบเบธเบกเบฅเบฐเบเบปเบ, เบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบกเปเบ /lib/systemd/system/crond.service.
เบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเบเบขเบฒเบเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบ Red Hat, /bin/sh เบเบทเบเปเบเปเปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเปเบเบเบญเบเปเบฅเบตเปเบกเบเบปเปเบ, เปเบเบดเปเบเปเบเบฑเบ bash เบกเบฒเบเบเบฐเบเบฒเบ. เบกเบฑเบเบเบงเบเบเบฐเบชเบฑเบเปเบเบเบงเปเบฒเปเบกเบทเปเบญเปเบฅเปเบเบงเบฝเบ cron เบเปเบฒเบ /bin/sh, bash shell เปเบฅเบตเปเบกเบเบปเปเบเปเบเปเบซเบกเบ POSIX-compliant เปเบฅเบฐเบเปเปเปเบเปเบญเปเบฒเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเบตเปเบกเปเบเบตเบก, เปเบฅเปเบเบขเบนเปเปเบเปเบซเบกเบเบเบตเปเบเปเปเบกเบตเบเบฒเบเปเบเปเบเบญเบ.
cronie เปเบ SLES เปเบฅเบฐ openSUSE
เบเบฒเบเปเบเบเบขเบฒเบเปเบเบเบฅเบฐเบกเบฑเบ SLES เปเบฅเบฐเบญเบฐเบเบธเบเบฑเบ openSUSE เบเบญเบเบกเบฑเบเปเบเป cronie เบเบฝเบงเบเบฑเบ. daemon เบขเบนเปเบเบตเปเบเบตเปเบเบฑเบเบเบทเบเปเบเบตเบเบเบปเบงเบเบฒเบเปเบเป systemd, เบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบฑเปเบเบขเบนเปเปเบ /usr/lib/systemd/system/cron.service. เบเบฒเบเบเบฑเปเบเบเปเบฒ: /etc/crontab, /etc/cron.d, /var/spool/cron/tabs. /bin/sh เปเบกเปเบ bash เบเบฝเบงเบเบฑเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเปเปเบเบเปเปเปเบเปเบเบญเบเบเบตเปเบเบฐเบเบดเบเบฑเบเบเบฒเบก POSIX.
เบญเบธเบเบฐเบเบญเบ Vixie cron
เบฅเบนเบเบซเบฅเบฒเบเบเบตเปเบเบฑเบเบชเบฐเปเบซเบกเบเบญเบ cron เบเปเปเปเบเปเบเปเบฝเบเปเบเบเบขเปเบฒเบเปเบซเบเปเบซเบผเบงเบเปเบกเบทเปเบญเบเบฝเบเบเบฑเบ Vixie cron, เปเบเปเบเบฑเบเปเบเปเบฎเบฑเบเบเบธเบเบชเบปเบกเบเบฑเบเปเบซเบกเปเบเบตเปเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเบปเปเบฒเปเบเบซเบผเบฑเบเบเบฒเบเบเบญเบเปเบเบเบเบฒเบ. เบซเบผเบฒเบเปเบชเปเบงเบเบเบฐเบซเบเบฒเบเปเบซเบผเบปเปเบฒเบเบตเปเบเบทเบเบญเบญเบเปเบเบเบเปเปเบเบต เปเบฅเบฐเบชเบฑเบเบชเบปเบเบฅเบฐเบซเบฑเบ. เบฅเบฐเบซเบฑเบเปเบซเบผเปเบ cron เบเบปเปเบเบชเบฐเบเบฑเบเปเบเบ Paul Vixey เปเบกเปเบเบกเบตเบเบงเบฒเบกเบเบดเบเบเบตเบเบตเปเบเบฐเบญเปเบฒเบ.
เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเบงเบดเปเบเบฒเบฐเบญเบธเบเบฐเบเบญเบ cron เปเบเบเปเบเปเบเบปเบงเบขเปเบฒเบเบเบญเบเปเบเบเบเบฒเบ cron เบเบปเปเบงเปเบเบเบฑเบเบเบฑเบเบชเบญเบเบชเบฒเบเบฒเบเบญเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒ - Vixie cron 3.0pl1. เบเปเบญเบเบเบฐเปเบฎเบฑเบเบเบปเบงเบขเปเบฒเบเบเปเบฒเบเปเบเบเบเบฒเบเบเบญเบ ifdefs เบเบตเปเบชเบฑเบเบชเบปเบเบเบฒเบเบญเปเบฒเบเปเบฅเบฐเบฅเบปเบเบฅเปเบฒเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบฅเบฑเบเบเปเบญเบ.
เบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบเบตเบเบตเบชเบฒเบเบชเบฒเบกเบฒเบเปเบเปเบเบญเบญเบเปเบเบฑเบเบซเบผเบฒเบเบเบฑเปเบเบเบญเบ:
- เบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเปเบเบเบเบฒเบ.
- เปเบเบฑเบเบเปเบฒเปเบฅเบฐเบเบฑเบเบเบธเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเบซเบเปเบฒเบงเบฝเบเบเบตเปเบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบ.
- เปเบฅเปเบ cron loop เบซเบผเบฑเบ.
- เปเบฅเบตเปเบกเปเปเบฒเบงเบฝเบ.
เปเบซเปเปเบเบดเปเบเบขเบนเปเปเบเบเปเบฒเบชเบฑเปเบ.
เบเบฒเบเบฅเบดเปเบฅเบตเปเบก
เปเบกเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบ, เบซเบผเบฑเบเบเบฒเบเบเบฒเบเบเบงเบเบชเบญเบเบเบฒเบเปเบเปเบเบฝเบเบเบฐเบเบงเบเบเบฒเบ, cron เบเบดเบเบเบฑเปเบเบเบปเบงเบเบฑเบเบเบฒเบเบชเบฑเบเบเบฒเบ SIGCHLD เปเบฅเบฐ SIGHUP. เบญเบฑเบเบเปเบฒเบญเบดเบเปเบฎเบฑเบเปเบซเปเบเบฒเบเปเบเบปเปเบฒเบเบฑเบเบเบถเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบชเบดเปเบเบชเบธเบเบเบญเบเบเบฐเบเบงเบเบเบฒเบเปเบเบฑเบเบเปเบญเบ, เบญเบฑเบเบเบตเบชเบญเบเบเบดเบเบเบปเบงเบญเบฐเบเบดเบเบฒเบเปเบเบฅเปเบเบญเบเปเบเบฅเปเบเบฑเบเบเบถเบ:
signal(SIGCHLD, sigchld_handler);
signal(SIGHUP, sighup_handler);cron daemon เปเบฎเบฑเบเบงเบฝเบเบขเบนเปเบเบปเบเบเบฝเบงเบขเบนเปเปเบเบฅเบฐเบเบปเบ, เบเบฝเบเปเบเปเปเบเบฑเบ superuser เปเบฅเบฐเบเบฒเบเปเบเปเบฅเบเบฐเบเปเบฅเบต cron เบเบปเปเบเบเป. เบเบฒเบเปเบเบเปเปเปเบเบเบตเปเบชเปเบฒเบเปเบเบฅเปเบฅเบฑเบญเบเบเปเบงเบ PID เบเบญเบเบเบฐเบเบงเบเบเบฒเบ daemon, เปเบซเปเปเบเปเปเบเบงเปเบฒเบเบนเปเปเบเปเบเบทเบเบเปเบญเบเปเบฅเบฐเบเปเบฝเบเปเบเปเบฅเบเบฐเบเปเบฅเบตเบเบฐเบเบธเบเบฑเบเปเบเบฑเบเบเบปเปเบเบเป:
acquire_daemonlock(0);
set_cron_uid();
set_cron_cwd();เปเบชเบฑเปเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบทเบเบเบฑเปเบเปเบงเป, เปเบเบดเปเบเบเบฐเบเบทเบเบเปเบฒเปเบเปเปเบเปเบงเบฅเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเบฐเบเบงเบเบเบฒเบ:
setenv("PATH", _PATH_DEFPATH, 1);เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบฐเบเบงเบเบเบฒเบเปเบกเปเบ "daemonized": เบกเบฑเบเบชเปเบฒเบเบชเปเบฒเปเบเบปเบฒเปเบเบฑเบเบเปเบญเบเบเบญเบเบเบฐเบเบงเบเบเบฒเบเปเบเบเบเบฒเบเปเบเบซเบฒ fork เปเบฅเบฐเบเบญเบเบเบฐเบเบธเบกเปเบซเบกเปเปเบเบเบฐเบเบงเบเบเบฒเบเปเบเบฑเบ (เปเบเบซเบฒ setsid). เบเบฐเบเบงเบเบเบฒเบเบเบญเบเบเปเปเปเบกเปเปเบกเปเบเบเปเปเบเปเบฒเปเบเบฑเบ, เปเบฅเบฐเบกเบฑเบเบญเบญเบเบเบฒเบ:
switch (fork()) {
case -1:
/* ะบัะธัะธัะตัะบะฐั ะพัะธะฑะบะฐ ะธ ะทะฐะฒะตััะตะฝะธะต ัะฐะฑะพัั */
exit(0);
break;
case 0:
/* ะดะพัะตัะฝะธะน ะฟัะพัะตัั */
(void) setsid();
break;
default:
/* ัะพะดะธัะตะปััะบะธะน ะฟัะพัะตัั ะทะฐะฒะตััะฐะตั ัะฐะฑะพัั */
_exit(0);
}
เบเบฒเบเบขเบธเบเปเบเบปเบฒเบเบฐเบเบงเบเบเบฒเบเบเปเปเปเบกเปเบเปเบญเบเบเบปเบงเบฅเบฑเบญเบเปเบเปเบเบฅเปเบฅเบฑเบญเบ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เบกเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบฑเบเบเบธเบ PID เปเบเปเบเบฅเปเปเบซเปเบเบฑเบเปเบเบฑเบ. เบซเบผเบฑเบเบเบฒเบเบเบตเป, เบเบฒเบเบเปเปเบกเบนเบเบซเบเปเบฒเบงเบฝเบเบเบฐเบเบทเบเบเบทเปเบกเปเบชเปเปเบ:
/* ะฟะพะฒัะพัะฝัะน ะทะฐั
ะฒะฐั ะปะพะบะฐ */
acquire_daemonlock(0);
/* ะะฐะฟะพะปะฝะตะฝะธะต ะะ */
database.head = NULL;
database.tail = NULL;
database.mtime = (time_t) 0;
load_database(&database);เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, cron เบเปเบฒเบเปเบเบชเบนเปเบงเบปเบเบเบญเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบปเปเบเบเป. เปเบเปเบเปเบญเบเบเบฑเปเบ, เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบดเบเบฒเบฅเบฐเบเบฒเบเบฒเบเปเบซเบผเบเบฅเบฒเบเบเบฒเบเบงเบฝเบ.
เบเบฒเบโเปเบเบฑเบโเบเปเบฒโเปเบฅเบฐโเบเบฒเบโเบเบฑเบโเบเบธเบโเบเบฑเบโเบเบตโเบฅเบฒเบโเบเบฒเบโเบงเบฝเบโเบเบฒเบโ
เบเบฑเบเบเบฑเบ load_database เบฎเบฑเบเบเบดเบเบเบญเบเปเบเบเบฒเบเปเบซเบผเบเบฅเบฒเบเบเบทเปเปเปเบฒเบงเบฝเบ. เบกเบฑเบเบเบงเบเปเบเบดเปเบ 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 เบเบงเบเบชเบญเบเบงเปเบฒเบเบนเปเปเบเปเบเบตเปเบเบปเบเบเบฑเบเบเบทเปเปเบเบฅเปเบเบฒเบเบฐเบฅเบฒเบเบกเบตเบขเบนเป (เปเบงเบฑเปเบเปเบชเบเปเบเปเบงเปเบฒเบกเบฑเบเปเบเบฑเบ superuser) เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเปเบเบซเบฒ 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=value) เปเบเบเปเบเปเบเบฑเบเบเบฑเบ load_env / env_set, เบซเบผเบทเบเปเบฒเบญเบฐเบเบดเบเบฒเบเบซเบเปเบฒเบงเบฝเบเบเบทเบเบญเปเบฒเบ (* * * * * /path/to/exec) เปเบเบเปเบเปเบเบฑเบเบเบฑเบ load_entry.
เบซเบเปเบงเบเบเบฒเบเบเบฒเปเบเบปเปเบฒเบเบตเป load_entry เบเบฑเบเบเบทเบเบกเบฒเปเบกเปเบเบงเบฝเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เปเบเบดเปเบเบเบทเบเบเบฑเบเปเบชเปเปเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบปเปเบงเปเบเบเบญเบเบงเบฝเบเบเบฒเบ. เบเบฑเบเบเบฑเบเบเบปเบงเบกเบฑเบเปเบญเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐ verbose เบเบญเบเบฎเบนเบเปเบเบเปเบงเบฅเบฒ, เปเบเปเบเบงเบเปเบฎเบปเบฒเบกเบตเบเบงเบฒเบกเบชเบปเบเปเบเบซเบผเบฒเบเปเบเบเบฒเบเบชเปเบฒเบเบเบปเบงเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเปเบฅเบฐเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเปเบเบตเบเบเบปเบง:
/* ะฟะพะปัะทะพะฒะฐัะตะปั ะธ ะณััะฟะฟะฐ ะดะปั ะทะฐะฟััะบะฐ ะทะฐะดะฐัะธ ะฑะตััััั ะธะท 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);loop เบเบปเปเบเบเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเบงเบฝเบเบเบฒเบเปเบเบเบฐเบเบธเบเบฑเบ.
เบชเบฒเบเบซเบผเบฑเบ
cron เบเบปเปเบเบชเบฐเบเบฑเบเบเบฒเบ Version 7 Unix เปเบฎเบฑเบเบงเบฝเบเบเปเบญเบเบเปเบฒเบเบเปเบฒเบเบเบฒเบ: เบกเบฑเบ re-read the configuration in a loop, launching the tasks of the current minutes as a superuser, and sleep until the start of the next minutes. เบงเบดเบเบตเบเปเบฒเบเปเบเบตเปเปเบเปเบเบทเปเบญเบเปเบเบปเปเบฒเบเปเบญเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเบซเบผเบฒเบเปเบเบตเบเปเบ.
เบชเบฐเบเบฑเบเบเบฒเบเปเบฅเบทเบญเบเปเบเปเบเบทเบเบชเบฐเปเบซเบเบตเปเบ SysV, เปเบเบดเปเบ daemon เปเบเปเปเบเบเบญเบเบเบปเบเบเปเบงเบฒเบเบฒเบเบตเบเบตเปเปเบเปเบเบตเปเบชเบธเบเบเบตเปเบงเบฝเบเบเบฒเบเปเบเปเบเบทเบเบเปเบฒเบเบปเบ, เบซเบผเบทเบชเปเบฒเบฅเบฑเบ 30 เบเบฒเบเบต. เบกเบตเบเบฒเบเบเปเบฅเบดเปเบเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเปเปเบญเบเบฅเบปเบเบชเบณเบฅเบฑเบเบเบฒเบเบญเปเบฒเบเบเบฒเบเบเบฑเปเบเบเปเบฒ เปเบฅเบฐเบเบฒเบเบเบงเบเบชเบญเบเปเปเบฒเบงเบฝเบเบเบทเบเปเปเปเปเบเปเปเบเบเบตเป, เปเบเปเบเบฒเบเบญเบฑเบเปเบเบเบฅเบฒเบเบเบทเปเปเปเบฒเบงเบฝเบเบขเปเบฒเบเบงเปเบญเบเปเบงเปเบเปเบเบฒเบเปเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเปเบเปเปเบชเบฐเบเบงเบ.
Vixie cron เบเบฑเบเบเบทเบเปเบเบซเบฒเบเบฒเบเบเบงเบเบชเบญเบเบฅเบฒเบเบเบฒเบเบงเบฝเบเบซเบเบถเปเบเบเบฑเปเบเบเปเปเบเบฒเบเบต, เปเบเบเบเบตเปเบเบเบญเบเบเปเบฒเบเบเบญเบ 80s เบกเบตเบเบฑเบเบเบฐเบเบฒเบเบญเบเบซเบผเบฒเบเปเบเปเบเบทเปเบญเบ Unix เบกเบฒเบเบเบฐเบเบฒเบ:
/* ะฟะตัะฒะธัะฝะฐั ะทะฐะณััะทะบะฐ ะทะฐะดะฐั */
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 เบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเปเบเบ Unix เบเบตเปเบเบต, เบเบฑเปเบเปเบกเปเบ, เบกเบฑเบเปเบฎเบฑเบเบเบฒเบเบชเปเบญเบกเปเบเบกเปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบเบซเบเปเบฒเบงเบฝเบเปเบเบ asynchronous. เบเบฐโเบเบงเบโเบเบฒเบโเบเปเปโเปเบกเปโเบเบฑเบโเบชเบทเบโเบเปเปโเปเบเบตเบโเบเบฐโเบเบดโเบเบฑเบโเบงเบฝเบโเบเบฒเบโ, เบเบฐโเบเบงเบโเบเบฒเบโเปเบเบฑเบโเบเปเบญเบโเบเบฐโเบเบฝเบกโเบเบฐโเบเบงเบโเบเบฒเบโเบงเบฝเบโเบเบฒเบโ:
switch (fork()) {
case -1:
/*ะฝะต ัะผะพะณะปะธ ะฒัะฟะพะปะฝะธัั fork */
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));
/* ะทะฐะฟััะบ ัะฐะผะพะน ะบะพะผะฐะฝะดั
*/
{
/* ะฟะตัะตะผะตะฝะฝะฐั ะพะบััะถะตะฝะธั SHELL ัะบะฐะทัะฒะฐะตั ะฝะฐ ะธะฝัะตัะฟัะตัะฐัะพั ะดะปั ะทะฐะฟััะบะฐ */
char *shell = env_get("SHELL", e->envp);
/* ะฟัะพัะตัั ะทะฐะฟััะบะฐะตััั ะฑะตะท ะฟะตัะตะดะฐัะธ ะพะบััะถะตะฝะธั ัะพะดะธัะตะปััะบะพะณะพ ะฟัะพัะตััะฐ,
* ัะพ ะตััั ะธะผะตะฝะฝะพ ัะฐะบ, ะบะฐะบ ะพะฟะธัะฐะฝะพ ะฒ ัะฐะฑะปะธัะต ะทะฐะดะฐั ะฟะพะปัะทะพะฒะฐัะตะปั */
execle(shell, shell, "-c", e->cmd, (char *)0, e->envp);
/* ะพัะธะฑะบะฐ โ ะธ ะฟัะพัะตัั ะฝะฐ ะทะฐะฟัััะธะปัั? ะทะฐะฒะตััะตะฝะธะต ัะฐะฑะพัั */
perror("execl");
_exit(ERROR_EXIT);
}
break;
default:
/* ัะฐะผ ะฟัะพัะตัั ะฟัะพะดะพะปะถะฐะตั ัะฐะฑะพัั: ะถะดะตั ะทะฐะฒะตััะตะฝะธั ัะฐะฑะพัั ะธ ะฒัะฒะพะดะฐ */
break;
}เบเบฑเปเบเปเบกเปเบเบเบทเปเบเบเบฒเบ cron เบเบฑเบเบซเบกเบปเบ. เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบฅเบฐเปเบงเบฑเปเบเบเบฒเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบ, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, เบเบฑเบเบเบตเบชเปเบฒเบฅเบฑเบเบเบนเปเปเบเปเบซเปเบฒเบเปเบเบชเบญเบเบซเบผเบตเบ, เปเบเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบญเบฐเบเบดเบเบฒเบเบชเบดเปเบเบเบตเปเบเบปเปเบเบเป.
Afterword
Cron เปเบเบฑเบเปเบเบฃเปเบเบฃเบกเบเบตเปเบเปเบฒเบเบเบฒเบ เปเบฅเบฐ เปเบเบฑเบเบเบฐเปเบซเบเบเบขเปเบฒเบเปเปเบฒเบเบฐเบซเบฅเบฒเบเปเบ, เบชเปเบฒเบเบเบถเปเบเปเบเบเบฐเปเบเบเบต Unix เบเบตเปเบเบตเบเบตเปเบชเบธเบ. เบกเบฑเบเบเปเปเปเบเปเปเบฎเบฑเบเบซเบเบฑเบเบเบดเปเบชเบ, เปเบเปเบกเบฑเบเปเบเปเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบกเบฑเบเปเบเปเบเบตเบซเบผเบฒเบเปเบเบฑเบเปเบงเบฅเบฒเบซเบผเบฒเบเบเบปเบเบชเบฐเบงเบฑเบ. เบเบตเปเปเบกเปเบเบเบฒเบเปเบเบดเปเบเบฅเบฐเบซเบฑเบเบชเบณเบฅเบฑเบเบฅเบธเปเบเบเบตเปเบกเบฒเบเปเบญเบกเบเบฑเบ Ubuntuเบเปเบญเบเปเบเปเปเบงเบฅเบฒเบเปเปเปเบเบตเบเปเบถเปเบเบเบปเปเบงเปเบกเบ, เปเบฅเบฐเบเปเบญเบเบกเบตเบเบงเบฒเบกเบกเปเบงเบเบซเบผเบฒเบ! เบเปเบญเบเบซเบงเบฑเบเบงเปเบฒเบเปเบญเบเบเบฐเบชเบฒเบกเบฒเบเปเบเปเบเบเบฑเบเบกเบฑเบเบเบฑเบเปเบเบปเปเบฒเปเบเป.
เบเปเบญเบเบเปเปเบฎเบนเปเบเปเบฝเบงเบเบฑเบเปเบเบปเปเบฒ, เปเบเปเบเปเบญเบเปเบชเบเปเบเปเบฅเบฑเบเบเปเบญเบเบเบตเปเบฎเบนเปเบงเปเบฒเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเบเบตเปเบเบฑเบเบชเบฐเปเบซเบก, เปเบเบเบกเบตเปเบเบงเปเบเปเบกเบเบตเปเบเบฐเบชเบฑเบเบชเบปเบเปเบฅเบฐเบเปเปเบกเบตเบเบปเบงเบเบปเบเปเบเบตเบเปเบ, เบเปเปเปเบเปเปเบญเบทเปเบญเบญเปเบฒเบเบงเบเปเบซเปเปเบเปเบเบงเบฒเบกเบเปเบฒเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบงเปเบเบฑเบเปเบงเบฅเบฒเบเบปเบเบเบฒเบ.
เบกเบตเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบเบฑเบเบชเบฐเปเบซเบกเบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบ cron: systemd-timers เบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฑเบเบฅเบฐเบเบฝเบเบฅเบฐเบเบปเบเบเบตเปเบเบฑเบเบเปเบญเบเบเปเบงเบเบเบฒเบเปเบเบดเปเบเบเบฒเบญเบฒเปเบช, fcron เบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเบเปเบฅเบดเปเบเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเปเบเปเปเบเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบ. เปเบเปเบชเปเบงเบเบเบปเบง, crontab เบเบตเปเบเปเบฒเบเบเบฒเบเบเบตเปเบชเบธเบเปเบกเปเบเบเบฝเบเบเปเบชเปเบฒเบฅเบฑเบเบเปเบญเบเบชเบฐเปเบซเบกเบต.
เปเบเบชเบฑเปเบ, เบฎเบฑเบ Unix, เปเบเปเปเบเปเบเบผเบกเบเปเบฒเบเปเปเบฅเบฐเบขเปเบฒเบฅเบทเบกเบญเปเบฒเบ mana เบชเปเบฒเบฅเบฑเบเปเบงเบเบตเบเบญเบเบเปเบฒเบ!
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com
