แแแแกแแแ แฌแแ แแ, แ แแ แแแแแแแ แ แกแแแแแแ แแ แฃแงแฃแ แแแแ. แแ แแแแฃแ แแ แแจแ แแ แช แแ แแแ แแแแกแขแแแ แแ แกแแแแแแแแ แแ แแ แช Unix, แแแแ แแ แแฆแแก แแ แแแ แแแแกแขแแแแ แแแแแแแแแแแแแ แแชแแแ: cron แแแแแงแฃแ แก แแแแแแแแก แแ แแก แแแ แแแชแแแแ.
Command แฎแแแแก แแแแฃแแแแฃแ แ แแ แแแ แแแแแ แฉแแแแแแก แกแแกแฃแกแขแ แแ แจแ แแแแ. sed, awk, wc, cut แแ แกแฎแแ แซแแแแ แแ แแแ แแแแแ แงแแแแแแฆแแฃแ แแ แแแแ แแแแ แกแแ แแแขแแแแ แฉแแแแก แกแแ แแแ แแแแ. แแแแ แ แแแแแแแ แจแแฅแแแแแแ แ แแแแ แช แแแแชแแแแแ cron-แแกแแแแก, 70-แแแแ แฌแแแแแก แแแแ แแแแกแแแแก.
แแแแ แฎแแแก แแแแแแแแแแแจแ แแแงแแแแแแ cron-แก แแแแแแแ แฃแแแ, แแแขแแแแแจแ แจแแกแแแแก แแแ แแจแ, แแแแ แแ แแ แ แแฆแแก, แ แแแแกแแช แกแแ แแแขแแก แแแจแแแแแกแแก แจแแชแแแแแก แฌแแแแฌแงแแ, แแแแแแฌแงแแแขแ แกแแคแฃแซแแแแแแแ แจแแแแกแฌแแแแ. แแกแ แแแแแฉแแแ แแก แกแขแแขแแ, แ แแแแแก แฌแแ แแกแแก แแแแแชแแแ POSIX crontab-แก, Cron-แแก แแแแแแ แแแ แแแแขแแแก แแแแฃแแแ แฃแแ Linux แแแกแขแ แแแฃแชแแแแจแ แแ แแแแแแ แแ แแแแแแแแก แกแขแ แฃแฅแขแฃแ แแก.
แแงแแแแแ Linux-แก แแ แแฌแแ แแแแแ cron แแแแชแแแแแก? แแแแแขแแ แแกแแแ แกแแกแขแแแแก แแแแแชแฎแแแแก แแ แฅแแขแแฅแขแฃแ แ Unix-แจแ? แแแจแแ แฉแแแ แแแแจแ แแแ แ!
แแแคแแ แแแชแแแก
แกแแฎแแแแแแแก แฌแแ แแแจแแแ POSIX แแ แแแขแแแ แแแกแขแกแแแแ แ - Vixie cron 3.0pl1 cron Debian-แแ แแ Ubuntu-แแ cronie Red Hat-แแ, Fedora-แกแ แแ CentOS-แแ cronie SLES-แจแ แแ openSUSE-แจแ Vixie cron แแแฌแงแแแแแแแ Afterword
แกแแฎแแแแแแแก แฌแแ แแแจแแแ
แแแแฎแแแ แแแแแก แแ แกแแกแขแแแแก แแ แแแ แแแแแแก แแแ แแแแฃแแ แจแแกแ แฃแแแแ แแจแแแ แ แแฃแชแแแแแแแแแ แงแแแแ แแแแ แแชแแฃแ แกแแกแขแแแแจแ. แแแแขแแ, แแ แแแ แแแแกแขแแแแ แแแแชแแแแแแ แแก แกแแ แแแกแแแแก แกแแญแแ แแแแ, แ แแแแแแช แแแ แกแแจแฃแแแแแแก แแซแแแแก แชแแแขแ แแแแแแแฃแแแ แแแแแแแแ แแ แจแแแกแ แฃแแแ แแแแชแแแแแ แแแแ แฎแแแก แฌแแ.
Unix-แแก แแกแแแแกแ แแแแ แแชแแฃแแ แกแแกแขแแแแแ แกแแแแแแก แแฆแแแก Unix 7 แแแ แกแแแแแ, แ แแแแแแช แจแแแฅแแแ แแแกแฃแแ แกแแฃแแฃแแแก 70-แแแ แฌแแแแจแ Bell Labs-แจแ, แแแ แจแแ แแก แชแแแแแแ แแแ แขแแแแกแแแแก แแแแ . Unix-แแก แแ-7 แแแ แกแแแจแ แแกแแแ แจแแแแก cron, แกแแ แแแกแ แกแฃแแแ แแแแฎแแแ แแแแแก แแแแแแแแแแแก แ แแแฃแแแ แฃแแแ แจแแกแ แฃแแแแแกแแแแก.
แขแแแแฃแ แ แแแแแแแแ แแแ cron แแแ แขแแแ แแ แแแ แแแแ, แแแแ แแ แแ แแแแแแแฃแ แ แแแ แกแแแก แแแแ แแชแแฃแแ แแแแแ แแแแ แแแแแ แฃแคแ แ แแแ แขแแแ แแงแ: แกแแ แแแกแ แแฆแแแซแแแแ แฌแฃแแจแ แแ แแฎแแ, แแแแฎแฃแแแแแ แชแฎแ แแแก แแแแชแแแแแแ แแ แแ แคแแแแแแแ (/etc/lib/crontab) แแ แแกแ แฃแแแแแ แกแฃแแแ แแแแฎแแแ แแแแแ แแก แแแแแแแแแแ, แ แแแแแแแช แฃแแแ แจแแกแ แฃแแแแฃแแแงแ แแแแแแแแ แ แแแแแแขแจแ.
แจแแแแแแแจแ, แแแ แขแแแ แแ แกแแกแแ แแแแแ แกแแ แแแกแแก แแแฃแแฏแแแแกแแแฃแแ แแแ แกแแแแ แแแแฌแแแแแ แงแแแแ Unix-แแก แแกแแแแก แแแแ แแชแแฃแ แกแแกแขแแแแก.
แแ แแแขแแแแก แคแแ แแแขแแก แแแแแแแแแแแฃแแ แแฆแฌแแ แแแแแแแ แแ แแแแฃแแแแฃแ แ แแฃแจแแแแแก แซแแ แแแแแ แแ แแแชแแแแแ 1992 แฌแแแก แจแแแแแ Unix-แแก แแกแแแแกแ แแแแ แแชแแฃแแ แกแแกแขแแแแแแก แแแแแแ แกแขแแแแแ แขแจแ - POSIX แแ แแแแแแ แแ, แแ แแแ แแ แคแแฅแขแ แกแขแแแแแ แขแแแแ แแแฎแแ แแ แแฃแ แ แกแขแแแแแ แขแ.
1987 แฌแแแก แแแ แแแฅแกแแ, แ แแแแแแแช แแแแแแแแฎแ Unix-แแก แแแแฎแแแ แแแแแแ cron-แแก แกแฃแ แแแแแแแก แจแแกแแฎแแ, แแแแแฃแจแแ แแแแแแแก แแแแแ แแ แแ แแแ แกแแ, แ แแแแแแแช แแแแแแกแฌแแ แ แขแ แแแแชแแฃแแ cron-แแก แแแแแแ แแ แแ แแแแแแ แแ แแแแคแแ แแแแ แชแฎแ แแแแก แคแแแแแแแก แกแแแขแแฅแกแ.
Vixie-แก แแแกแแแ แแแ แกแแแ, แแ แแแแ แแแแฌแงแ POSIX แแแแฎแแแแแแแก แแแแแแงแแคแแแแแ, แแแ แแ แแแแกแ, แแ แแแ แแแแก แฐแฅแแแแ แแแแแ แแแฃแ แ แแแชแแแแแ, แฃแคแ แ แกแฌแแ แแ, แกแแแ แแแ แแ แแงแ แแแชแแแแแ, แแแ แแ README-แจแ แแ แกแแแฃแแ แกแฃแ แแแแแแแกแ: แแแขแแ แ แแ แแซแแแแ แแแ แแแขแแแแก, แแแขแแ แแก แกแแฎแแแก. แแ แจแแแซแแแแ แฌแแแจแแแแก แแ แแ แแแ แแแแก แแแงแแแแ แจแแกแแซแแแแแแแ แแฎแแแแ แฌแงแแ แแก แแแแแแ แแ แแแ. แแก แแแแฎแแแแแแ แแแแกแแแแแ แแฆแแแฉแแแ แแแแแกแฃแคแแแ แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแแก แแ แแแชแแแแแแแ, แ แแแแแแช แแแแฃแแแ แแแแก แแซแแแก แแ แฌแแแแจแ, แแกแ แ แแ, แแแแแแ แแ แซแแ แแแแแ Linux แแแกแขแ แแแฃแชแแ, แ แแแแแแช แแแแแฉแแแ 90-แแแแ แฌแแแแแก แแแกแแฌแงแแกแจแ, แแแแฆแ Vixie cron, แ แแแแ แช แแแแ แกแแกแขแแแ แแ แแฆแแแแ แแแแแแ แแแก แแแก.
แแแ แซแแ, Red Hat แแ SUSE แแแแแแ แแแแ Vixie cron-แแก แฉแแแแแก - cronie, แฎแแแ Debian แแ Ubuntu แแงแแแแแแ Vixie cron-แแก แแ แแแแแแแฃแ แแแแแชแแแแก แแ แแแแแ แแแฉแแแแ.
แฏแแ แแแแแชแแแ POSIX-แจแ แแฆแฌแแ แแ แแแแฎแแแ แแแแแก แฃแขแแแแขแ crontab-แก, แ แแก แจแแแแแแแช แแแแแแฎแแแแแ Vixie cron-แจแ แแแฌแแแแแฃแ แกแแแขแแฅแกแฃแ แแแคแแ แแแแแแแก แแ Vixie cron-แแก แแแ แแแชแแแแแก แแแแแงแแแแแแก Linux-แแก แแแแฃแแแ แฃแ แแแกแขแ แแแฃแชแแแแจแ. แแ แแแแแก, แแแฃแแแแ แขแแ แขแแ แแ แแก cron daemon แแแฌแงแแแแแแแแก แแแแแแแ.
POSIX แแ แแแขแแแ
แแฃ แแ แแแแแแแฃแ แ cron แงแแแแแแแแก แแฃแจแแแแแ แกแฃแแแ แแแแฎแแแ แแแแแกแแแแก, แแแแแแแแ แแแ แแ แแคแแแแแ แฎแจแแ แแ แฃแแแแแแแแแแแ แฉแแแฃแแแแ แแแ แแแแฎแแแ แแแแแแแก แแแแชแแแแแก, แ แแช แฃแคแ แ แฃแกแแคแ แแฎแ แแ แแแกแแฎแแ แฎแแแแแแ.
Crons แแแฌแแแแแฃแแแ แ แแแแ แช แแ แ แแ แแแ แแแแก แแแแ แแแ: แแฃแแแแแแ แแแจแแแแฃแแ cron daemon แแ crontab แฃแขแแแแขแ, แ แแแแแแช แฎแแแแแกแแฌแแแแแแ แแแแฎแแแ แแแแแแแกแแแแก. แแก แฃแแแแแกแแแแแ แกแแจแฃแแแแแแก แแแซแแแแ แจแแชแแแแแ แแแแชแแแแแแก แชแฎแ แแแแแ, แ แแแแแแแช แกแแแชแแคแแแฃแ แแ แกแแกแขแแแแก แแแแแแฃแแ แแแแฎแแแ แแแแแกแแแแก, แฎแแแ แแแแแแ แแฌแงแแแก แแแแชแแแแแก แแแแฎแแแ แแแแแก แแ แกแแกแขแแแแก แชแฎแ แแแแแแแแ.
ะ
crontab แฃแขแแแแขแแจแ แแแแแซแแฎแแแแ แจแแแแซแแแแ แแแแแแแแ แแแฎแ แ แแ: แจแแชแแแแแ แแแแฎแแแ แแแแแก แแแแแแแแแก แชแฎแ แแแ แ แแแแฅแขแแ แจแ, แฉแแขแแแ แแแ แชแฎแ แแแ แคแแแแแแแ, แแฉแแแแแ แแแแแแแแ แ แแแแแแแแแก แชแฎแ แแแ แแ แแแแกแฃแคแแแแแ แแแแแแแแแก แชแฎแ แแแ. แแแแแแแแแแ, แแฃ แ แแแแ แแฃแจแแแแก 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). แฉแแแฃแแแแแกแแแแแ , แแแแแแ แแแกแฃแฎแแกแแแแแแแแ แแแแชแแแแแแก แฌแแแแแฎแแแแ แแ แแแจแแแแแแ แกแแกแขแแแแก แแแแชแแแแแแก แชแฎแ แแแแแแ แแ แแแแแแแแฃแแแฃแ แ แแแแฎแแแ แแแแแก แแแแแแแแแก แชแฎแ แแแแแแแแ, แฎแแแ crontab แฃแขแแแแขแ แแแกแฃแฎแแกแแแแแแแแ แแแแฎแแแ แแแแแก แชแฎแ แแแแแแก แ แแแแฅแขแแ แแแแแ.
แแแแแแแแแก แชแฎแ แแแ แแ แแแแคแแแฃแ แแชแแแก แคแแแแแแ
แกแฃแแแ แแแแฎแแแ แแแแแก แแแแชแแแแแแก แชแฎแ แแแ แแแแแแ แแแแก /etc/crontab-แจแ. แกแแกแขแแแแก แชแฎแ แแแแก แกแแแขแแฅแกแ แจแแแกแแแแแแแ Vixie cron-แแก แกแแแขแแฅแกแก, แแ แแแแแแแแแแกแแ, แ แแ แแแกแจแ แแแแฅแแกแ แกแแแขแ แแแฃแแแแแแก แแ แแแแฎแแแ แแแแแก แกแแฎแแแแ, แ แแแแแก แกแแฎแแแแแแช แแแแฌแงแ แแแแแแแแ:
# ะะฐะฟััะบะฐะตััั ะตะถะตะผะธะฝััะฝะพ ะพั ะฟะพะปัะทะพะฒะฐัะตะปั vlad
* * * * * vlad /path/to/exec
แฉแแแฃแแแแ แแแ แแแแฎแแแ แแแแแก แแแแแแแแแก แชแฎแ แแแแแ แแแแแแแกแแแฃแแแ /var/cron/tabs/username-แจแ แแ แแงแแแแแก แแแแแ แกแแแขแแฅแกแก. แ แแแแกแแช แแงแแแแแ crontab แแ แแแ แแแแก, แ แแแแ แช แแแแฎแแแ แแแแแ, แแก แแ แแก แคแแแแแแ, แ แแแแแแแช แ แแแแฅแขแแ แแแฃแแแ.
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 แฃแแ แแแแ แแ แแ แแก แแแฌแแแแแฃแแ แแแแแแแก แแแแ , แแ แแแแ แแฆแแแฃแแแ แคแแแแแแแ
แแแแแแ แแ แแแ แแแแก แชแแแแแ (แแแแกแแแฃแแ แแแแ SHELL แแ HOME) แแแแแแงแแแแแ แแแแแ cron-แแก แแแแ แแแแชแแแแก แจแแกแแกแ แฃแแแแแแ. แแ, แ แแแแ แแแแแแงแฃแ แแแ bash-แแก แแแแแงแแแแแ แกแขแแแแแ แขแฃแแ sh-แแก แแแชแแแแ แแแ แแแแฃแแ แแแแชแแแแแแก แจแแกแแกแ แฃแแแแแแ:
SHELL=/bin/bash
HOME=/tmp/
# exec ะฑัะดะตั ะทะฐะฟััะตะฝ bash-ะตะผ ะฒ /tmp/
* * * * * /path/to/exec
แกแแแแแแ แฏแแแจแ, แชแฎแ แแแจแ แแแแกแแแฆแแ แฃแแ แแแ แแแแก แงแแแแ แชแแแแแ (แแแแแแงแแแแแ cron-แแก แแแแ แแ แกแแญแแ แแ แแ แแชแแกแแกแแแแก) แแแแแแชแแแ แแแจแแแแฃแ แแแแชแแแแก.
แคแแแแแแแก แ แแแแฅแขแแ แแแแกแแแแก crontab แแงแแแแแก VISUAL แแ EDITOR แแแ แแแแก แชแแแแแจแ แแแแแแแแฃแ แ แแแแฅแขแแ แก. แแฃ แแแ แแแแจแ, แกแแแแช แแ แแแขแแแ แแงแ แแแจแแแแฃแแ, แแ แแฅแแก แแก แชแแแแแแแ แแแแกแแแฆแแ แฃแแ, แแแจแแ แแแแแแงแแแแแ "/usr/ucb/vi" (ucb แแ แแก แแแแแ แแแแแคแแ แแแแก แฃแแแแแ แกแแขแแขแ, แแแ แแแ).
cron Debian-แแ แแ Ubuntu-แแ
Debian-แแก แแ แฌแแ แแแแแฃแแ แแแกแขแ แแแฃแชแแแก แแแแแแแแแ แแแแ แแแแแฃแจแแแก
แแแแแแแแ แจแแกแแแฉแแแแ, แแแแ แแ แฎแแแจแแกแแฎแแแ แชแแแแแแแแแ แแแแชแแแก แแแแคแแแฃแ แแชแแแก แคแแแแแแแก แแแแแแ แแแแแก แแ แแแแชแแแแแแก แชแฎแ แแแแแก.
Debian-แจแ แแแแฎแแแ แแแแแก แชแฎแ แแแแแ แแแแแแ แแแแก /var/spool/cron/crontabs แแแ แแฅแขแแ แแแจแ, แกแแกแขแแแแก แชแฎแ แแแ แแกแแ แแฅ แแ แแก - /etc/crontab-แจแ. Debian แแแแแขแแก แกแแแชแแคแแแฃแ แ แแแแแแแแแก แชแฎแ แแแแแ แแแแแแกแแแฃแแแ /etc/cron.d-แจแ, แกแแแแแแแช cron แแแแแแ แแแขแแแแขแฃแ แแ แแแแฎแฃแแแแก แแแ. แแแแฎแแแ แแแแแก แฌแแแแแแก แแแแขแ แแแ แแแแขแ แแแแแแ /etc/cron.allow แแ /etc/cron.deny แคแแแแแแแ.
แแแแฃแแแกแฎแแแแ แแแ แกแ แแแแแ แแ แแก /bin/sh, แ แแแแแแช Debian-แจแ แแ แแก แแแขแแ แ POSIX-แแแ แแแแกแแแแแ แแแ แกแ.
แแแแแ Cron Debian-แแก แฃแแฎแแแก แแแ แกแแแแจแ แแแจแแแแฃแแแ systemd-แแก แกแแจแฃแแแแแแ, แฎแแแ แแแจแแแแแก แแแแคแแแฃแ แแชแแ แจแแแแซแแแแ แแแฎแแ /lib/systemd/system/cron.service-แจแ. แกแแ แแแกแแก แแแแคแแแฃแ แแชแแแจแ แแแแกแแแฃแแ แแแฃแแ แแ แแคแแ แแ; แแแแแกแแแแ แ แฃแคแ แ แแแฎแแแฌแแแ แแแแแแแแแก แแแ แแแ แจแแแซแแแแ แแแแฎแแ แชแแแแแแก แแแ แแแแก แชแแแแแแแแก แกแแจแฃแแแแแแ, แ แแแแแแแช แแแ แแแแแ แแแแแชแฎแแแแแฃแแแ แแแแแแฃแแ แแแแฎแแแ แแแแแก แแ แแแขแแแจแ.
cronie RedHat-แแ, Fedora-แกแ แแ CentOS-แแ
แแแแฃแแแกแฎแแแแ แแแแคแแแฃแ แแชแแ แแ แแก แฉแแแฃแแแแ แแ แแแแแแแแจแ: แกแแกแขแแแแก แชแฎแ แแแ แแ แแก /etc/crontab-แจแ, แแแแแขแแแ แแแแแกแแแแ แแแแแแแ แชแฎแ แแแแแก /etc/cron.d-แจแ, แแแแฎแแแ แแแแแก แชแฎแ แแแแแ แแแแแแแแ /var/spool/cron/crontabs-แจแ.
แแแแแแ แแฃแจแแแแก systemd แแแแขแ แแแแก แฅแแแจ, แกแแ แแแกแแก แแแแคแแแฃแ แแชแแ แแ แแก /lib/systemd/system/crond.service.
Red Hat-แแก แแกแแแแก แแแกแขแ แแแฃแชแแแแแ /bin/sh แแแแฃแแแกแฎแแแแแ แแแแแแงแแแแแ แแแจแแแแแกแแก, แ แแช แแ แแก แกแขแแแแแ แขแฃแแ bash. แฃแแแ แแฆแแแแจแแแก, แ แแ cron แกแแแฃแจแแแแแแก แแแจแแแแแกแแก /bin/sh-แแ, bash shell แแฌแงแแแ POSIX-แแแ แจแแกแแแแแแก แ แแแแแจแ แแ แแ แแแแฎแฃแแแแก แแแแแขแแแแ แแแแคแแแฃแ แแชแแแก, แแฃแจแแแแก แแ แแแแขแแ แแฅแขแแฃแ แ แแแแแจแ.
cronie SLES-แจแ แแ openSUSE-แจแ
แแแ แแแแฃแแ แแแกแขแ แแแฃแชแแ SLES แแ แแแกแ แฌแแ แแแแแฃแแ openSUSE แแงแแแแแก แแแแแ cronie-แก. แแแแแแ แแฅ แแกแแแ แแแจแแแแฃแแแ 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 แแแแแก แฌแแแแแฎแแ แกแแกแแแแแแแแ.
แแแแขแแ, แแ แแแแแแฌแงแแแขแ แแแแแแแแแแแแแแแ cron แแแฌแงแแแแแแแ cron แแ แแแ แแแแก แแแแแแแแแก แแแแแงแแแแแแ, แ แแแแแแช แกแแแ แแแ แแแแแแแแ แแแแก แแ แแแ แคแแแแแแแกแแแแก - Vixie cron 3.0pl1. แแ แแแแแแแ แขแแแแ แแแแแแแแแแก ifdef-แแแแก แแแแฆแแแแ, แ แแแแแแแช แแ แแฃแแแแก แแแแฎแแแก แแ แแแแแขแแแแแก แแชแแ แ แแแขแแแแแก.
แแแแแแแก แแฃแจแแแแ แจแแแซแแแแ แแแแงแแก แ แแแแแแแแ แแขแแแแ:
- แแ แแแ แแแแก แแแแชแแแแแแแชแแ.
- แจแแกแแกแ แฃแแแแแแ แแแแชแแแแแแก แกแแแก แจแแแ แแแแแ แแ แแแแแฎแแแแ.
- แแแแแแ แ cron loop แแฃแจแแแแก.
- แแแแฌแงแ แแแแแแแแ.
แแแแแ แจแแแฎแแแแ แแแ แแแแแแแแแแ แแแแ.
แแแแชแแแแแแแชแแ
แแแฌแงแแแแกแแก, แแ แแชแแกแแก แแ แแฃแแแแขแแแแก แจแแแแฌแแแแแก แจแแแแแ, cron แแงแแแแแก SIGCHLD แแ SIGHUP แกแแแแแแแก แแแแแฃแจแแแแแแแแก. แแแ แแแแ แแแแแแแก แแฃแ แแแแจแ แฉแแแแฌแแ แก แแแแจแแแก แแ แแชแแกแแก แจแแฌแงแแแขแแก แจแแกแแฎแแ, แแแแ แ แฎแฃแ แแแก log แคแแแแแก แคแแแแแก แแฆแฌแแ แก:
signal(SIGCHLD, sigchld_handler);
signal(SIGHUP, sighup_handler);
cron daemon แงแแแแแแแแก แแฃแจแแแแก แแแ แขแ แกแแกแขแแแแจแ, แแฎแแแแ แกแฃแแแ แแแแฎแแแ แแแแแก แกแแฎแแ แแ แแแแแแ แ cron แแแ แแฅแขแแ แแแแแ. แจแแแแแแ แแแ แแแ แฅแแแแก แแแแแแแแแก แคแแแแก แแแแแแแก แแ แแชแแกแแก PID-แแ, แแแ แฌแแฃแแแแ, แ แแ แแแแฎแแแ แแแแแ แกแฌแแ แแ แแ แจแแชแแแแแ แแแแแแแแ แ แแแ แแฅแขแแ แแ แแแแแแ แแ:
acquire_daemonlock(0);
set_cron_uid();
set_cron_cwd();
แแแงแแแแแฃแแแ แแแแฃแแแกแฎแแแแ แแแ, แ แแแแแแช แแแแแงแแแแแฃแแ แแฅแแแแ แแ แแชแแกแแแแก แแแฌแงแแแแกแแก:
setenv("PATH", _PATH_DEFPATH, 1);
แจแแแแแ แแ แแชแแกแ "แแแแแแแแแแฃแแแ": แแก แฅแแแแก แแ แแชแแกแแก แจแแแแแแแ แแกแแก 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);
แจแแแแแ แแ แแแ แแแแแแแก แซแแ แแแแ แกแแแฃแจแแ แชแแแแแ. แแแแแแแ แแ, แฆแแ แก แแแแแฎแแแแ แแแแชแแแแแแก แกแแแก แฉแแขแแแ แแแแก.
แแแแชแแแแแแก แกแแแก แจแแแ แแแแแ แแ แแแแแฎแแแแ
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;
}
}
แแฅ แแ แแแ แแแแก แชแแแแแ แแแงแแแแแฃแแแ (แคแแ แแแก VAR=แแแแจแแแแแแแแก แฎแแแแแ) load_env / env_set แคแฃแแฅแชแแแแแก แแแแแงแแแแแแ, แแ แแแแชแแแแก แแฆแฌแแ แ แแแแแฎแแแ (* * * * * /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);
แแแแแแ แ แแแ แงแฃแแ แแฃแจแแแแก แแแแชแแแแแแก แแแแแแแแ แ แกแแแกแแแ.
แแแแแแ แ แแแ แงแฃแแ
แแ แแแแแแแฃแ แ แแ แแแ Unix 7 แแแ แกแแแแแ แกแแแแแแ แแแ แขแแแแ แแฃแจแแแแแ: แแแ แฎแแแแฎแแ แฌแแแแแแฎแ แแแแคแแแฃแ แแชแแ แแแ แงแฃแแจแ, แแแแฅแแแแแ แแแแแแแแ แ แฌแฃแแแก แแแแชแแแแแ, แ แแแแ แช แกแฃแแแ แแแแฎแแแ แแแแแ แแ แแซแแแ แแแแแแแแ แฌแฃแแแก แแแฌแงแแแแแแ. แซแแแ แแแแฅแแแแแแ แแก แแแ แขแแแ แแแแแแแ แซแแแแแ แแแแ แ แแกแฃแ แกแก แแแแแฎแแแแ.
แแแขแแ แแแขแแฃแแ แแแ แกแแ แจแแกแแแแแแแก SysV-แจแ, แ แแแแแจแแช แแแแแแ แแซแแแแแแ แแ แฃแแฎแแแแก แฌแฃแแแแแ, แ แแแแแกแแแแกแแช แแแแแแแแ แแงแ แแแแกแแแฆแแ แฃแแ, แแ 30 แฌแฃแแแก แแแแแแแแแแแจแ. แแแแแแแ แ แแกแฃแ แกแ แแแแฎแแ แฏแ แแแแคแแแฃแ แแชแแแก แฎแแแแฎแแ แฌแแแแแฎแแแกแ แแ แแ แ แแแแแจแ แแแแชแแแแแแก แจแแกแแแแฌแแแแแแ, แแแแ แแ แแแแชแแแแแแก แกแแแก แกแฌแ แแคแแ แแแแแฎแแแแ แแแฃแฎแแ แฎแแแแแ แแแฎแแ.
Vixie cron แแแแ แฃแแแ แแแแแแแแแแแก แกแแแแแก แจแแแแฌแแแแแก แฌแฃแแจแ แแ แแฎแแ, แกแแแแแแแแ แแ 80-แแแแ แฌแแแแแก แแแแแก แแแชแแแแแแ แแแขแ แ แแกแฃแ แกแ แแงแ แกแขแแแแแ แขแฃแแ 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 แกแขแแแจแ, แแแฃ แแแแแแแก แฉแแแแแก แแแแแแแแแก แแกแแแฅแ แแแฃแแแ แจแแกแแกแ แฃแแแแแแ. แแจแแแแแก แแ แแชแแกแ แแแ แซแแแแแก แแแแชแแแแแแก แแแฌแงแแแแก, แแแแจแแแก แแ แแชแแกแ แแแแแแแแก แแแแแแแแแก แแ แแชแแกแก:
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;
}
แแก แแ แแก แซแแ แแแแแแ แงแแแแแคแแ แ cron แแ แแก. แแ แแแแแแขแแแ แ แแแแแแแแ แกแแแแขแแ แแกแ แแแขแแแ, แแแแแแแแแ, แแแกแขแแแชแแฃแ แ แแแแฎแแแ แแแแแแแก แแฆแ แแชแฎแแ, แแแแ แแ แแ แแแแแแแแแแ แแแแแแ แ.
Afterword
Cron แแ แแก แกแแแชแ แแ แแแ แขแแแ แแ แกแแกแแ แแแแแ แแ แแแ แแแ, แจแแฅแแแแแ Unix-แแก แกแแแงแแ แแก แกแแฃแแแแแกแ แขแ แแแแชแแแแแ. แแก แแแแแขแแแแ แแ แแคแแ แก แแแแแแแก, แแแแ แแ แฃแแแ แ แแแแแแแแ แแแแฃแแ แฌแแแแ แกแแแชแ แแ แแกแ แฃแแแแก แแแแแก แกแแฅแแแก. Ubuntu-แก แแแแแแ แแฃแแ แแแ แกแแแก แแแแแก แแแฆแแแแก แแ แแฃแแแขแแก แแ แแ แกแแแแ แแแกแญแแ แแ แแ แแ แซแแแแแ แแแแแฎแแแ แฃแแแ! แแแแแแ แจแแแซแแแ แแแแแแแแ แแ.
แแ แแ แแแชแ แแฅแแแแ, แแแแ แแ แชแแขแ แกแแแแแแแ แแแ แแแแก แแแชแแแแแแ แแแแ, แ แแ แแแแแแแแ แแแ แแ แแแ แแแแ แแแ, แแแแแแขแแ แแแ แแฃแแแแแกแ แแ แแแกแขแ แแฅแขแฃแแ แขแแแแแแชแแแ, แแแแ แฎแแแแ แแ แฃแฌแงแแแก แฎแแแก แแกแแแ แกแแแแ แขแแแแกแแแแก.
cron-แแก แแ แแแแแ แแแแแแแแ แแแ แแแขแแ แแแขแแแ แแ แกแแแแแก: systemd-timers แแแซแแแแ แกแแจแฃแแแแแแก แแแแฌแงแแ แ แแฃแแ แกแแกแขแแแแแ แแแแแแแแแแฃแแแแแแแ, fcron แแแซแแแแ แกแแจแฃแแแแแแก แฃแคแ แ แแแฅแแแแแ แแแแ แแแฃแแแ แแ แ แแกแฃแ แกแแแแก แแแฎแแแ แแแ แแแแชแแแแแแก แแแฎแแแแแ. แแแแ แแ แแแ แแแแ แฉแแแแแแก แฃแแแ แขแแแแกแ แแ แแแขแแแ แงแแแแแแแแก แกแแแแแ แแกแ แแงแ.
แแแแแแ, แแแงแแแ แ Unix, แแแแแแงแแแแ แแแ แขแแแ แแ แแแ แแแแแ แแ แแ แแแแแแแฌแงแแแ แฌแแแแแแฎแแ แแแแ แแฅแแแแ แแแแขแคแแ แแแกแแแแก!
แฌแงแแ แ: www.habr.com