αα»ααΆαβαααααβααΆβααααβαααααΆαβαα·αβααΎαα αα αααα»αααααααΆαααααααααααααΆααααα αα·αααΆαα’αααααααααααααα·ααΈ α¬ Unix ααααα ααα»ααααα’αααααααααααααα·ααΈαααααααααααααΉαα αααΆααααΆα cron ααΉαααΆαααΆααααααααΆαααα½αα±αααα½αααα
α§αααααααααΎααααΆαααααααΆααααΆααααααααΆααΊααΆα ααα»α ααααα αα·αααΆααΆαααΆααααααΆαααααα»αα sed, awk, wc, cut αα·ααααααα·ααΈα αΆαααααααααααααααΌαααΆαααααΎαααΆαααα scripts αα ααΎ servers ααααααΎαααΆαααααΆααααααα αα½αααααΆα αααΎαααααΌαααΆααα ααΆα‘αΎαααΆααΆααα·α αα αααααΆαα cron αααααΆαααααα·ααΈααααααααααΆαααΎαααααΎαααΈααααααααααΈ 70 α
α’ααααααααααΆααΌαααααααα»αααΆαααααΎ cron ααΎααααααααα·αααΆαα αΌααα αααα»αααααααΆααααα’α·α ααα»αααααααααα½α αα αααααααααα»ααα½ααααααααα α»ααα αααααααΎαααΆαααααααΈα αααα»αααΆααααααα α α·ααααα·αα·αααααΎαααΆα±ααααΆαα ααααα ααα αααααΆαααααααα’ααααααααααΆααααα αΆααααα½α ααααααααααααα»ααααααααΆαααα»αααΆαααααΆαα POSIX crontab αααααΆαααααΎα cron ααααααΆαααα αααα»αααΆαα ααα αΆαααΈαα»α ααααααα·αα αα·ααα ααΆαααααααααα½αα ααα½ααααα½αααα
ααΎα’ααααααα»αααααΎααΈαα»α αα·αααααΎαααΆααα·α αα ααΆα cron ααααα? ααΎα’αααα αΆααα’αΆααααααααΎααααΆαααααααααααααα·ααΈαααααααααα αααα»αααΌααΈααα? αααααΆααααααΎααααα»αααααΎααααΎα!
ααΆαα·ααΆ
αααααααΎααααααααααααα POSIX crontab αααααΆα ααααα»α - Vixie cron 3.0pl1 cron αα ααΎ Debian αα·α Ubuntu cronie αα ααΎ Red Hat, Fedora αα·α CentOS cronie αα αααα»α SLES αα·α openSUSE α§ααααα Vixie cron Afterword
αααααααΎααααααααααααα
ααΆαααααα·ααααα·ααΆαααΆαααααααααααααα·ααΈα’αααααααΎααααΆαα α¬ααααααααααΊααΆααΆαα αΆαααΆα αααΆααααααααα αααα»αααααααααααααα·ααααα·ααΆαααΆααα’ααα ααΌα ααααα αΎα α’αααααααααααααα·ααΈααΆαααΉαααΈαααααΌαααΆααααααΆααααααΆαααααααα’αα»ααααΆαα±αααα½ααααααα ααααααΆααααααΆα αα·αααααα·ααααα·ααΆαααΆαααΆααααΈααΌαααΆαααΆααααα αΎαα
ααααααααααααα·ααααα·ααΆαααΌα Unix ααΆαααΆααααααααΎααααααα½ααααααα‘αααα αααα 7 Unix αααααααΌαααΆααααααΎαα‘αΎααααα»αααααααααααΈ 70 ααααααααααΈα α»αααααααα Bell Labs αα½αααΆααααα Ken Thompson ααααααΈααααΆααααααα αααα 7 Unix αααα½ααααα αΌααααααααΌα cron αααααΆααααΆαααααααααΆααααααΎαααΆαααΆαααα αΆαααΌα superuser tasks α
cron ααααΎαααααααΆααΊααΆαααααα·ααΈααααΆαααααα½α ααα»αααααααα½ααααααααΆαααααα·ααααα·ααΆαααααααααΎαααΊααΆααααααΆααααααΆααα»αα ααααΆααααααααΆααα‘αΎααααααααα»ααα½αααΆααΈ α’αΆαααΆααΆαααΆαα½αααΉααα·α αα ααΆαααΈα―αααΆααααα½α (/etc/lib/crontab) αα·αααααΎαααΆααααααΆαα superuser αα·α αα ααΆαααΆαααααααααα½αααααΌαααΆαα’αα»αααααα ααααααα
ααααααα αααααααααΆααααααα’ααααααΆααααααΆαααα αα·αααΆαααααααααααααΌαααΆαααααααααααααΆαα½αααααααααααααα·ααααα·ααΆαααΌα Unix ααΆααα’ααα
ααΆααα·αααααΆααΌαα αααααααα crontab αα·ααααααΆαααααΆααΌαααααΆαααααααα·ααααα·ααΆαααααα§αααααααααΎααααΆααααααΌαααΆααα½ααααα αΌααα αααα»ααααααααΆαααααΆααααααααααααααααα·ααααα·ααΆαααΌα Unix - POSIX - αααα»αααααΆα 1992 α αΎαααΌα αααα cron ααΈαααααααΆα de facto ααΆαααααΆαααΆαααααααΆα de jure α
αα ααααΆα 1987 ααα Paul Vixie αααααΆααααααααα·α’αααααααΎααααΆαα Unix α’αααΈααααααααΆααααΆαααααα½ααααααααΆαα cron ααΆαα ααααααΆααααααα½ααααααααααααααα·αααααααααααΌααααα αΆαα½αα ααα½ααα cron αααααααΈ αα·ααααααΈαααΆαααααααααααααα―αααΆαααΆααΆαα
αααααααααΈααΈαα Vixie cron ααΆαα αΆααααααΎααααααααΆααααααΌαααΆα POSIX ααΎαααΈαααααααααααα·ααΈαααααΆαα’αΆααααΆαααααααααΈα¬αααα»ααα αα·ααα·αααΆαα’αΆααααΆαααααα’αααΈααΆααα’ααααΎααααααααααααααΆααααΆαα αααα»α README: α’ααααα·αααααα·ααααααααΆαααΆααΆαααααααα’ααααα·αααα αα·αα’αΆα αα»αααΆααα α αΎααααααα·ααΈα’αΆα αααααΆαααααΆαα½αααΌααααααααα»αααααα αααααΌαααΆαααΆαααααααΆααααααα ααΆααααΌαααααΆααΆαα½αααΉααααααΆααααααααααα·ααΈα₯ααα·αααααααααααα»αααα½αααΆααααααΆαααα·αααΆααα αααα»αααααΆαααΆααααα ααΌα ααααααΆαα ααα αΆαααΈαα»α ααααΆααααα½αα ααα½ααααααΆααααα αΆααααα½ααα ααΎαααααααααααΈ 90 ααΆααα Vixie cron ααΆαααααααααααααα½ααα α αΎααα αααααα»αα’αα·ααααααΆαα αααααααα
ααΆαα·ααα Red Hat αα·α SUSE αααααΎααααα Vixie cron - cronie α αΎα Debian αα·α Ubuntu ααααΎααΆαααααα»αααααΎααααα Vixie cron ααΆαα½αααΉαααααααΆα αααΎαα
ααααΌαααΎαααααΆααα§αααααααααΎααααΆαα crontab αααααΆααα·αααααΆαα αααα»α POSIX αααααΆααααααΎαααΉααα·αα·αααααΎααααααααααααααΆααααααααααααααααΆααα αααα»α Vixie cron αα·αααΆαααααΎααααΆαααααααααα½ααα Vixie cron αααα»αααΆαα ααα αΆαααΈαα»α ααααααα·ααα α αΎαααΈαααα»α cherry αα ααΎααααΊααΆααΆααα·ααΆαααα§ααααα cron daemon α
POSIX crontab
ααααα·αααΎ cron ααΎααααααααααΎααΆααααααΆαα superuser α’αααααααααααααααΎαααααααααααααΆαααΆαα½αααΉαααΆααα·α αα ααααα’αααααααΎααααααΆ αααααΆααα»ααααα·ααΆα αα·αααΆααααα½αααΆαα
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 ααΊααΆααααΌααααα’αααα’αΆα αααααααα§αααααααααΎααααΆαααααααααααααααααΆαα
- ααα - ααααΌααα ααΆααα’αααααααααααΆααααααααΆαααααΆαααααΎα
αα½αααααααααΆααααΆ POSIX αα·ααα·ααΆαα’αααΈα’αααΈαααααααααααααααααααΆααα’αααααΆαααααααααΈααΆααα
αααααΆα ααααα»α - Vixie cron 3.0pl1
αα»ααααα»ααααΌαα αααααΆαααααα cron ααααααα·ααααΊ Vixie cron 3.0pl1 αααααΆαααααΆααα αααα»ααααααΈαααα»ααααα½α comp.sources.unix αααα»αααααΆα 1992 α ααΎαααΉααα·α αΆαααΆαααααααα·αααα ααααααααααααααα αααα»ααααα’α·ααααααααααα
Vixie cron ααΆαααΈααααααα·ααΈ (cron αα·α crontab) α ααΌα ααααααΆ αααα·αααα½ααα»αααααΌαα ααααααΆαα’αΆα αα·αααααΎαααΆααα·α αα ααΆαααΈααΆααΆααα·α αα ααΆααααααααα αα·αααΆααΆαααΆααα·α αα α’αααααααΎααααΆααααΈαα½αα α αΎαα§αααααααααΎααααΆαα crontab ααα½ααα»αααααΌααααα»αααΆαααααααα½αααΆααΆαα’αααααααΎααααΆααα
ααΆααΆαααΆααα·α αα αα·αα―αααΆαααααααα ααΆαααααααα
ααΆααΆαααΆααα·α αα αααα superuser ααΆαααΈααΆαααα /etc/crontab α ααΆαααααααααααααααΆααΆαααααααααααααΌαααααΆααΉαααΆααααααααααααααα Vixie cron ααΎαααααααα½αααΈααααΆααα½ααα αααα»αααΆαααα αΆαααΈαααααααααα’αααααααΎααααααα½αα±αααα·α αα ααΆαααααΌαααΆαα αΆααααααΎαα
# ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π΅ΠΆΠ΅ΠΌΠΈΠ½ΡΡΠ½ΠΎ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ vlad
* * * * * vlad /path/to/exec
ααΆααΆαααΆααα·α αα α’αααααααΎααααΆααααααααΆααΆαααΈααΆαααα /var/cron/tabs/username α αΎαααααΎααΆαααααααααααααΌα ααααΆα αα αααα’αααααααΎαααΆαα§αααααααααΎααααΆαα crontab ααΆα’αααααααΎααααΆαα ααΆαααααααΊααΆα―αααΆααααααααΌαααΆαααααααα½αα
αααααΈα’αααααααΎααααΆαααααααΆααα·αααα·α αΌαααααΎ crontab ααααΌαααΆαααααααααααααα»α /var/cron/allow αα·α /var/cron/deny files αααα’αααααααΆαααααααα αΌααααααα’αααααααΎααααΆαααααα»ααααααΆααααΆα ααααα‘αααα½αα
ααΆααααααααααααααααα
ααΎαααααααααα ααΉα 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 α ααααα·αααΎααα·ααααΆαααα crontab ααααΌαααΆαααααΎαααΆααα·αααΆαα’αααααΆααααααααααΆααααααααα "/usr/ucb/vi" ααααΌαααΆαααααΎ (ucb ααΊαααα ααααΆααΆαααα·ααααΆαααααΆααΈα αααααααΆ αααΊαα‘α)α
cron αα ααΎ Debian αα·α Ubuntu
α’αααα’αα·αααααααα Debian αα·αααΆαα
ααα
αΆαααααΈααααΆαα
ααααααΆα
αα·αααΌαααααααααΆαα ααα»ααααααΆαααααΆααααααΌαααΆααααααααα½αααΆαααΈααΆααααα―αααΆαααααααα ααΆαααααααα αα·αααΆααΆααα·α αα ααΆαα
ααΆααΆαα’αααααααΎααααΆαααα αααα»α Debian ααΆαααΈααΆαααα αααα»ααα /var/spool/cron/crontabs ααΆααΆααααααααααα ααααΆα - αααα»α /etc/crontab α ααΆααΆαααΆααα·α αα ααΆααααΆαααααααα αααααααααααΌαααΆαααΆαααααα»α /etc/cron.d ααΈααααααααααααα·α cron α’αΆααα½αααΆαααααααααααααααα·α ααΆααααααααααααΆαα αΌαααααΎααααα’αααααααΎααααΆααααααΌαααΆαααααααααααααα―αααΆα /etc/cron.allow αα·α /etc/cron.deny α
αααααααΆαααΎααα
ααααΆ /bin/sh ααααα
αααα»α Debian ααΊααΆαααααΌα
αα½ααααα’αα»αααααΆα POSIX
Cron αααα½αααΆααααΆαααα αααα»αααααα α»αααααααααα»ααααα Debian ααααΌαααΆαααΎαααααΎαααΆαααΆαααα systemd α αΎαααΆαααααααα ααΆααααααααααΆαααΎαααααΎαααΆαα’αΆα ααααΌαααΆαααΎααα αααα»α /lib/systemd/system/cron.service α αα·αααΆαα’αααΈαα·ααααα αααα»αααΆαααααααα ααΆααααααααααααΆααααααααα ααΆαααααααααααα·α αα ααΆααααααααΆαααΆααααα’αΆα ααααΌαααΆαααααΎααΆααααα’αααααα·ααααΆααααααΆααααααΆααααααααΆαααα αααα»α crontab ααααα’αααααααΎααΈαα½ααα
cronie αα ααΎ RedHat, Fedora αα·α CentOS
ααΆαααααααα ααΆααααααααααααΆαααΎαααΊαα αααα»αααααααααααααΆα ααΆααΆαααααααααααΊαα αααα»α /etc/crontab αααα ααααΆααααΆααΆααααααα½ααααα αααα»α /etc/cron.d ααΆααΆαα’αααααααΎααααΆααα αΌααα /var/spool/cron/crontabs α
αααα·αααααΎαααΆααααααααΆααααααααααααααααααααα ααΆαααααααα ααΆααααααααααααΆααααααΊ /lib/systemd/system/crond.service α
αα ααΎααΆαα ααα αΆαααΌα Red Hat /bin/sh ααααΌαααΆαααααΎααΆαααααΆαααΎααα αααα αΆααααααΎα αααααΆαααααααΆα bash α ααΆαα½αααααααΌαααΆαααααααααΆααααΆαα αααααααΎαααΆαααΆαααΆα cron ααΆαααα /bin/sh ααα bash α αΆααααααΎααα αααα»αααααα’αα»αααααΆα 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 ααΎαααα Paul Vixey ααΊααΈαααΆααααα»αααΆαα’αΆαα
ααΌα αααααααα»αααΆααααααα α α·ααααα·ααΆαα§ααααα cron αααααααΎα§ααΆα ααααααααααα·ααΈ cron ααΌαα αααααΆααααΆααΆααΆααααΈαααααΆαα’αα·αααααα - Vixie cron 3.0pl1 α αααα»αβααΉαβααααα½αβα§ααΆα αααβαααβαα»α ifdefs αααβααααΎβα±ααβαααα»αααααΆαβαααβααΆαβα’αΆα αα·αβαα»αβα ααβααααααΆαβαααα’α·αβααΌα ααΆα α
ααΆαααΆααααααα·ααΆα α’αΆα αααα ααααΆααααΆααααΆαααΆα αααΎαα
- ααΆαα αΆααααααΎααααααα·ααΈα
- αααα»ααααααΌα αα·αααααΎαα αα α»ααααααααΆααααααΈαα·α αα ααΆααααααααΌαααααΎαααΆαα
- ααααα·ααα»α cron ααααΆαααααα»αααααΎαααΆαα
- α αΆααααααΎααα·α αα ααΆααα½αα
αααααΎααα½αααΆααΆαααααΆαααααααα
ααΆαα αΆααααααΎα
αα αααα αΆααααααΎα αααααΆααααΈαα·αα·αααααΎαα’αΆαα»αααααααααΎαααΆα cron ααα‘αΎαα§ααααααααααααΆααααααΆ SIGCHLD αα·α SIGHUP α ααΈαα½ααααααΎααααααα ααα»α’αααΈααΆααααα ααααααΎαααΆααα»ααΆα ααΈααΈααα·ααααααα·ααΈαα·αααααΆα―αααΆααααααααα ααα»α
signal(SIGCHLD, sigchld_handler);
signal(SIGHUP, sighup_handler);
cron daemon αααααααααΎαααΆαααααααΆααα―ααα ααΎαααααααα ααααΆααααααΆ superuser αα·αααΈ main cron directory ααα»αααααα ααΆαα α ααΌαααααααΆαααααααααααΎαα―αααΆαα αΆααααααΆαα½α PID ααααααΎαααΆααααα·α ααΌαααααΆααααΆα’αααααααΎααααΆααααααΉαααααΌα α αΎαααααΌααααα αα α»αααααααα ααΆα―αααΆαααααΆααα
acquire_daemonlock(0);
set_cron_uid();
set_cron_cwd();
ααααΌαααααΆαααΎαααααΌαααΆαααααα αααααΉαααααΌαααΆαααααΎαα αααα αΆααααααΎαααααΎαααΆαα
setenv("PATH", _PATH_DEFPATH, 1);
αααααΆααααααααΎαααΆαααΊ "daemonized"α ααΆαααααΎαα αααΆααα ααααααΌαααααααΎαααΆααααααΆαα α fork αα·αααααααααΈαα αααα»αααααΎαααΆααα»ααΆα (calling 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 αααα‘ααααΊααΆαα·α αα ααΆαααααααΎα αααααααΌαααΆαααΆαααααα»ααααααΈααΌαα αααα·α αα ααΆαα αα»αααΆααααα½αααΆα’αα»ααααααΆααααααΆααΆαααααααΈαααααααααααααααΆ ααα»ααααααΎαα αΆααα’αΆααααααααΆααααααααΆααααΎααΆααααααΎαα’αααααα·ααααΆα αα·ααααΆαααΆααααααα αΆααααααΎαααΆαααΆαα
/* ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π³ΡΡΠΏΠΏΠ° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π·Π°Π΄Π°ΡΠΈ Π±Π΅ΡΡΡΡΡ ΠΈΠ· 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);
ααααα·ααα»αααααΆααααααΎαααΆαααΆαα½ααααααΈαα·α αα ααΆααα αα α»ααααααα
ααααα·ααα»αααααΆαα
cron ααΎαααΈαααα 7 Unix ααααΎαααΆααααΆαααΆααααα ααΆα’αΆαα‘αΎααα·αααΌαααΆαααααααα αααα»αααααα·ααα»α α αΆααααααΎααα·α αα ααΆαααααΆααΈαα αα α»ααααααααΆ superuser α αΎαααααα αΌααααααΆαα αΆααααααΎαααααΆααΈαααααΆααα αα·ααΈααΆαααααααΆααααααααα ααΎαααΆαααΈαα αΆαααααΆαααΆαααααΆαα αααΎααααα
αααααααα½αααααΌαααΆαααααΎα‘αΎααα αααα»α 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 ααααΌαβααΆαβααααα·ααααα·βαααα»αβαα ααΆαααααβααΌααΈαβααβααα’ αααβααΊβααΆβααααΎβααΆαβαααααβααΎααααΈβαααααβαα·α αα ααΆαβαααβα’ααααΆαα ααααΎαααΆαααααααα αΆααααααΎααα·α αα ααΆα ααααΎαααΆααα»ααΆααααα αααααΎαααΆαααΆααα·α αα α
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 α ααΆαβαα·αβααΆαβααααΎβα’αααΈβααααααβαα ααα»ααααβααΆαβααΆαβααααΎβααΆαααΆαβααααβααΆαβαααΆαβα’ααα αΆαααβα’ααβααΆβα αααΎαβααααααααβααβα αΎαα ααΆαααα½αααΆααααααΌααααααΆαααααααααααααΆααααααΆαα½αα’ααΌααα»αααΌα αααΆαααααα·αααΎαααΈαα½ααααααα α αΎααααα»αααΈαααΆαααΆαα! αααα»ααααααΉαααΆαααα»αα’αΆα α αααααααααΆααΆαα½αα’αααα
αααα»ααα·αααΉαα’αααΈα’ααααα ααα»αααααααα»αααΆαααΆααααααααΆαααααα·α αααααΉαααΆαααααα·ααΈααααΎα αααααΆαααααααα ααααΆααααα»αααααααΆαα α½αα ααα» αα·αα’ααΌααΈ ααΆαα·αα’αααααααααααΆαααΆααααααααααα’ααααααααααΆααΌαααα αΎαα
ααΆααααααΎαααααΎααααΆα αααΎαα αααα cronα systemd-timers α’αα»ααααΆαα±ααα’ααααααα ααααααααααααα»αααααααΆαααΆαα½αααΉαααΆαα’αΆααααα fcron α’αα»ααααΆαα±ααα’ααααααααααααααΆαααααΎααααΆααααααΆαααΆααααααααααααΆαααΆααα·α αα α ααα»ααααβαααβααααΆααβαααα½α crontab ααΆααααβαααα»αβααΊβαααβααβαααααβααααΆααβαααααΆααβαααα»αβα
αα·ααΆαα±ααααααΈ αααα‘αΆαα Unix ααααΎαααααα·ααΈααΆαααα α αΎααα»αααααα α’αΆααααΆααΆαααααΆαααααα·ααΆααααα’ααα!
ααααα: www.habr.com