Cron αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž…αŸ– αž”αŸ’αžšαžœαžαŸ’αžαž· αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž“αž·αž„αž§αž”αž€αžšαžŽαŸ

Cron αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž…αŸ– αž”αŸ’αžšαžœαžαŸ’αžαž· αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž“αž·αž„αž§αž”αž€αžšαžŽαŸ

αž”αž»αžšαžΆαžŽβ€‹αžŸαžšαžŸαŸαžšβ€‹αžαžΆβ€‹αž˜αŸ‰αŸ„αž„β€‹αžŸαž”αŸ’αž”αžΆαž™β€‹αž˜αž·αž“β€‹αž˜αžΎαž›αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαž˜αŸαž™αž€αžΆαž›αžŠαŸαž–αŸ’αžšαŸƒαž•αŸ’αžŸαŸƒαž‘αžΆαŸ†αž„αž“αŸ„αŸ‡ αž˜αž·αž“αž˜αžΆαž“αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ ឬ Unix αž“αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαž–αŸ’αžœαžαŸ’αž„αŸƒαž“αŸαŸ‡αžŠαžΉαž„αž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆαŸ– cron αž“αžΉαž„αžαžΆαž˜αžŠαžΆαž“αž–αŸαž›αžœαŸαž›αžΆαž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž–αž½αž€αž‚αŸαŸ”

αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž‚αžΊαž‡αžΆαž…αŸ†αžŽαž»αž…αžαŸ’αžŸαŸ„αž™ αž“αž·αž„αž‡αžΆαž€αžΆαžšαž„αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αŸ” sed, awk, wc, cut αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αžΆαžŸαŸ‹αŸ—αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™ scripts αž“αŸ…αž›αžΎ servers αžšαž”αžŸαŸ‹αž™αžΎαž„αž‡αžΆαžšαŸ€αž„αžšαžΆαž›αŸ‹αžαŸ’αž„αŸƒαŸ” αž–αž½αž€αž‚αŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αž‡αžΆαž—αžΆαžšαž€αž·αž…αŸ’αž…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ cron αžŠαŸ‚αž›αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž–αŸαž›αž˜αžΆαž“αžŠαžΎαž˜αž€αŸ†αžŽαžΎαžαž–αžΈαž‘αžŸαžœαžαŸ’αžŸαžšαŸαž‘αžΈ 70 αŸ”

αž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž›αž‡αžΆαž™αžΌαžšαžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ’αžšαžΎ cron αž›αžΎαž•αŸ’αž‘αŸƒαžŠαŸ„αž™αž˜αž·αž“αž”αžΆαž“αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž„αŸƒαž˜αž½αž™ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž‡αž½αž”αž”αŸ’αžšαž‘αŸ‡αž€αŸ†αž αž»αžŸαž“αŸ…αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžœαžΆαž±αŸ’αž™αž”αžΆαž“αž αŸ’αž˜αžαŸ‹αž…αžαŸ‹αŸ” αž“αŸαŸ‡αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŸαžšαžŸαŸαžšαžœαžΆαžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαŸ’αž‚αžΆαž›αŸ‹ POSIX crontab αžŠαŸ‚αž›αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸ cron αžŠαŸαžŸαŸ†αžαžΆαž“αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αž›αžΈαž“αž»αž…αžŠαŸαž–αŸαž‰αž“αž·αž™αž˜ αž“αž·αž„αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸƒαž–αž½αž€αž‚αŸαŸ”

αžαžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎαž›αžΈαž“αž»αž… αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž·αž…αŸ’αž…αž€αžΆαžš cron αž˜αŸ‚αž“αž‘αŸ? αžαžΎαž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž“αŸ…αž€αŸ’αž“αž»αž„αž™αžΌαž“αžΈαž€αž‘αŸ? αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαžŠαŸ†αžŽαžΎαžš!

αž˜αžΆαžαž·αž€αžΆ

αž”αŸ’αžšαž—αž–αžŠαžΎαž˜αž“αŸƒαž”αŸ’αžšαž—αŸαž‘αžŸαžαŸ’αžœ

αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžαžΆαž˜αž€αžΆαž›αž€αŸ†αžŽαžαŸ‹αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž¬αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αžΊαž‡αžΆαž€αžΆαžšαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž αžΎαž™ αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžΆαž“αžŠαžΉαž„αž–αžΈαžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž–αž½αž€αž‚αŸαžšαŸ€αž”αž…αŸ†αž•αŸ‚αž“αž€αžΆαžšαž€αžŽαŸ’αžαžΆαž› αž“αž·αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž„αžΆαžšαžαžΆαŸ†αž„αž–αžΈαž™αžΌαžšαž™αžΆαžšαžŽαžΆαžŸαŸ‹αž˜αž€αž αžΎαž™αŸ”

αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαžΌαž… 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 αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ” αž€αŸ’αžšαŸ„αž™αž˜αž€αž‘αŸ€αžαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αžαžΆαžšαžΆαž„αž—αžΆαžšαž€αž·αž…αŸ’αž…αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž…αŸ†αž–αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αžŠαŸαž˜αž·αž“αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž—αžΆαžšαž€αž·αž…αŸ’αž…αž–αžΈαžαžΆαžšαžΆαž„αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž“αž·αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αŸ”

Π’ αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš POSIX αž₯αžšαž·αž™αžΆαž”αžαžšαž”αžŸαŸ‹αžŠαŸαž˜αž·αž“αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžαžΆαž˜αžœαž·αž’αžΈαžŽαžΆαž˜αž½αž™αž‘αžΎαž™ αž αžΎαž™αž˜αžΆαž“αžαŸ‚αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžš 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 αž“αž·αž„αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαŸ€αž„αŸ—αžαŸ’αž›αž½αž“αŸ” αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž˜αž·αž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‘αžΈαžαžΆαŸ†αž„αž“αŸƒαž―αž€αžŸαžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαžΆαž˜αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αžŽαžΆαž˜αž½αž™αž‘αžΎαž™αŸ”

αž™αŸ„αž„αžαžΆαž˜αžŸαŸ’αžŠαž„αŸ‹αžŠαžΆαžš αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“αž…αŸ†αž“αž½αž“αž”αž½αž“αžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αž€αžΆαž“αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ–

  1. HOME - αžαžαž•αŸ’αž‘αŸ‡αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαŸ”
  2. LOGNAME β€” αž…αžΌαž›β€‹αžŠαŸ„αž™β€‹αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎαŸ”
  3. PATH αž‚αžΊαž‡αžΆαž•αŸ’αž›αžΌαžœαžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαŸ”
  4. αžŸαŸ‚αž› - αž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž’αŸ’αž“αž€αž”αž€αž”αŸ’αžšαŸ‚αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαžΎαŸ”

αž‚αž½αžšαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆ 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 αž˜αž·αž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž•αŸ’αžαž›αŸ‹β€‹αžŠαŸ„αž™β€‹αžŠαŸαž˜αž·αž“β€‹αžŸαžΆαž˜αž‰αŸ’αž‰β€‹αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž™αž€β€‹αž…αŸαž‰β€‹αž–αžΈβ€‹αž―αž€αžŸαžΆαžš passwd. ធថេរ 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 αž‚αžΊαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžŸαžΆαž€αž›αžœαž·αž‘αŸ’αž™αžΆαž›αŸαž™αž€αžΆαž›αžΈαž αŸ’αžœαŸαžšαž‰αŸ‰αžΆ αž”αŸŠαžΊαž€αž‘αŸ)αŸ”

cron αž“αŸ…αž›αžΎ Debian αž“αž·αž„ Ubuntu

αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸƒ Debian αž“αž·αž„αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αžŠαŸαžšαžΈαžœαŸαž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™ αž€αŸ†αžŽαŸ‚αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αžαŸ’αž–αžŸαŸ‹αŸ” Vixie cron αž€αŸ†αžŽαŸ‚ 3.0pl1 αŸ” αž˜αž·αž“αž˜αžΆαž“αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸƒαž―αž€αžŸαžΆαžšαžαžΆαžšαžΆαž„αž‘αŸ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžœαžΆαž‚αžΊαž‡αžΆ Vixie cron αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ” αž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈαž’αŸ†αž”αŸ†αž•αž»αžαŸ– αž‚αžΆαŸ†αž‘αŸ’αžš syslog, SELinux ΠΈ αžšαž”αžŸαŸ‹ PAM.

αž˜αž·αž“αžŸαžΌαžœαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αžšαž½αž˜αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸƒαž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž“αž·αž„αžαžΆαžšαžΆαž„αž€αž·αž…αŸ’αž…αž€αžΆαžšαŸ”

αžαžΆαžšαžΆαž„αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ 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

αž€αž·αžšαž·αž™αžΆ - αžŸαž˜αž“αŸƒ Vixie cron αž€αŸ†αžŽαŸ‚ 4.1 αŸ” αžŠαžΌαž…αž“αŸ…αž€αŸ’αž“αž»αž„ Debian αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αž·αž“αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ PAM αž“αž·αž„ SELinux αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜ αž€αžΆαžšαžαžΆαž˜αžŠαžΆαž“αž―αž€αžŸαžΆαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎ inotify αž“αž·αž„αž˜αž»αžαž„αžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ”

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž“αŸ’αž›αŸ‚αž„αž’αž˜αŸ’αž˜αžαžΆαŸ– αžαžΆαžšαžΆαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„ /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 αžŠαŸ‚αž›β€‹αž’αŸ’αžœαžΎβ€‹αž±αŸ’αž™β€‹αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰β€‹αžŠαž›αŸ‹β€‹αž€αžΆαžšβ€‹αž’αžΆαž“ αž“αž·αž„β€‹αž›αž»αž”β€‹αž…αŸ„αž›β€‹αž–αŸαžαŸŒαž˜αžΆαž“β€‹αž›αž˜αŸ’αž’αž·αžβ€‹αžαžΌαž…αžαžΆαž…αŸ”

αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž”αž·αžŸαžΆαž…αž’αžΆαž…αž”αŸ‚αž„αž…αŸ‚αž€αž‡αžΆαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ–

  1. αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ”
  2. αž€αŸ†αž–αž»αž„αž”αŸ’αžšαž˜αžΌαž› αž“αž·αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž”αž‰αŸ’αž‡αžΈαž€αž·αž…αŸ’αž…αž€αžΆαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”
  3. αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ† cron αžŸαŸ†αžαžΆαž“αŸ‹αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”
  4. αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αž·αž…αŸ’αž…αž€αžΆαžšαž˜αž½αž™αŸ”

αžαŸ„αŸ‡αž˜αžΎαž›αž–αž½αž€αžœαžΆαžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αŸ”

αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜

αž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš 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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹