ËüÃDz»½ö¿ØÖÆ×ÅϵͳÈÎÎñµÄµ÷¶ÈºÍÖ´ÐУ¬»¹Ö±½ÓÓ°Ï쵽ϵͳµÄÏìÓ¦ËÙ¶È¡¢×ÊÔ´ÀûÓÃÂÊÒÔ¼°ÕûÌåÐÔÄÜ
ÎÞÂÛÊÇϵͳ¹ÜÀíÔ±¡¢¿ª·¢ÈËÔ±»¹ÊǸ߼¶Óû§£¬ÉîÈëÀí½â²¢ÉÆÓÃLinux¶¨Ê±Æ÷£¬¶¼ÊÇÌáÉý¹¤×÷ЧÂÊ¡¢ÓÅ»¯ÏµÍ³ÐÔÄܲ»¿É»òȱµÄ¼¼ÄÜ
±¾ÎĽ«ÉîÈë̽ÌÖLinux¶¨Ê±Æ÷µÄºËÐĸÅÄî¡¢¹¤×÷ÔÀí¡¢³£¼û¹¤¾ßÒÔ¼°¸ß¼¶Ó¦Óü¼ÇÉ£¬ÖúÄú³ÉΪLinux»·¾³ÏµĶ¨Ê±Æ÷¹ÜÀí¸ßÊÖ
Ò»¡¢Linux¶¨Ê±Æ÷»ù´¡ 1.1 ¶¨Ê±Æ÷¸ÅÊö ÔÚLinuxϵͳÖУ¬¶¨Ê±Æ÷¿ÉÒÔ±»ÊÓΪһÖÖ´¥·¢»úÖÆ£¬ËüÄܹ»ÔÚÖ¸¶¨µÄʱ¼äµã»ò¾¹ýÒ»¶¨µÄʱ¼ä¼ä¸ôºó£¬×Ô¶¯Ö´ÐÐÔ¤ÉèµÄÈÎÎñ»òº¯Êý
ÕâЩÈÎÎñ¿ÉÒÔÊÇϵͳ¼¶±ðµÄ£¨ÈçÄں˵÷¶È¡¢Öжϴ¦Àí£©£¬Ò²¿ÉÒÔÊÇÓû§¼¶±ðµÄ£¨È綨ʱ±¸·Ý¡¢ÈÎÎñÂÖѯ£©
1.2 Äں˶¨Ê±Æ÷ÓëÓû§¿Õ¼ä¶¨Ê±Æ÷ - Äں˶¨Ê±Æ÷£ºÔËÐÐÔÚÄÚºË̬£¬Í¨³£ÓɲÙ×÷ϵͳÄں˹ÜÀí£¬ÓÃÓÚʵÏÖµÍÑÓ³Ù¡¢¸ß¾«¶ÈµÄÈÎÎñµ÷¶È
Äں˶¨Ê±Æ÷ͨ¹ý×¢²áÒ»¸ö»Øµ÷º¯ÊýÀ´ÊµÏ֯书ÄÜ£¬µ±¶¨Ê±Æ÷µ½ÆÚʱ£¬¸Ã»Øµ÷º¯Êý»á±»×Ô¶¯µ÷ÓÃ
- Óû§¿Õ¼ä¶¨Ê±Æ÷£ºÔËÐÐÔÚÓû§Ì¬£¬Í¨³£ÓÉÓ¦ÓóÌÐò»ò½Å±¾¿ØÖÆ£¬Áé»îÐÔ¸ü¸ß£¬µ«¾«¶ÈºÍÏìÓ¦ËÙ¶È¿ÉÄÜÊÜÏÞÓÚÓû§Ì¬ÓëÄÚºË̬֮¼äµÄÉÏÏÂÎÄÇл»
³£¼ûµÄÓû§¿Õ¼ä¶¨Ê±Æ÷ʵÏÖ°üÀ¨`cron`×÷Òµ¡¢`at`ÃüÁîÒÔ¼°±à³ÌÓïÑÔÖеĶ¨Ê±Æ÷¿â£¨ÈçCÓïÑÔÖеÄ`setitimer`¡¢PythonÖеÄ`threading.Timer`£©
¶þ¡¢Linux¶¨Ê±Æ÷µÄ¹¤×÷ÔÀí 2.1 ʱ¼ä»ù×¼Ó뾫¶È LinuxϵͳµÄʱ¼ä¹ÜÀí»ùÓÚÓ²¼þʱÖÓ£¨ÈçRTC£¬ÊµÊ±Ê±ÖÓ£©ºÍÈí¼þʱÖÓ£¨ÈçϵͳʱÖÓ£©
ÄÚºËͨ¹ýÖÜÆÚÐÔµÄʱÖÓÖжÏÀ´Î¬»¤ÏµÍ³Ê±¼ä£¬²¢»ùÓÚ´ËʵÏÖ¶¨Ê±Æ÷µÄµ÷¶È
¶¨Ê±Æ÷µÄ¾«¶ÈÊܶàÖÖÒòËØÓ°Ï죬°üÀ¨Ó²¼þÐÔÄÜ¡¢ÄÚºËÅäÖÃÒÔ¼°µ±Ç°ÏµÍ³¸ºÔØ
2.2 ¶¨Ê±Æ÷Á´ÓëÓÅÏȼ¶ LinuxÄÚºËʹÓúìºÚÊ÷µÈÊý¾Ý½á¹¹À´¹ÜÀí¶¨Ê±Æ÷£¬È·±£¸ßЧ²éÕÒºÍÅÅÐò
µ±¶¨Ê±Æ÷µ½ÆÚʱ£¬ÏµÍ³»á°´ÕÕÓÅÏȼ¶Ë³ÐòÖ´ÐÐÏàÓ¦µÄ»Øµ÷º¯Êý
ÕâÖÖ»úÖÆÔÊÐíϵͳÔÚ¸´ÔÓÈÎÎñµ÷¶ÈÖб£³Ö¸ßЧºÍÓÐÐò
2.3 Öжϴ¦ÀíÓëÑÓ³Ù ¶¨Ê±Æ÷µ½ÆÚ»á´¥·¢Öжϣ¬Öжϴ¦Àí³ÌÐò¸ºÔðÖ´ÐÐÏàÓ¦µÄÈÎÎñ
È»¶ø£¬ÓÉÓÚÖжϴ¦ÀíÐèÒªÒ»¶¨µÄʱ¼ä£¬ÒÔ¼°¿ÉÄÜ´æÔÚµÄϵͳµ÷¶ÈÑÓ³Ù£¬¶¨Ê±Æ÷µÄʵ¼Ê´¥·¢Ê±¼ä¿ÉÄÜ»áÓëÔ¤ÆÚÓÐËùÆ«²î
Àí½â²¢ÓÅ»¯ÕâЩÑÓ³Ù£¬¶ÔÓÚʵÏָ߾«¶È¶¨Ê±Æ÷ÖÁ¹ØÖØÒª
Èý¡¢Linux¶¨Ê±Æ÷³£Óù¤¾ßÓëÃüÁî 3.1 `cron`Óë`crontab` `cron`ÊÇLinuxÏÂ×î³£ÓõĶ¨Ê±ÈÎÎñµ÷¶È¹¤¾ß£¬Í¨¹ý±à¼`crontab`Îļþ£¬Óû§¿ÉÒÔ¶¨ÒåÖÜÆÚÐÔÖ´ÐеÄÈÎÎñ
`cron`·þÎñÒÔÊØ»¤½ø³ÌµÄÐÎʽÔËÐУ¬¶¨ÆÚ¼ì²é`crontab`ÖеÄÈÎÎñ£¬²¢ÔÚÖ¸¶¨Ê±¼äÖ´ÐÐ
±à¼µ±Ç°Óû§µÄcrontabÎļþ crontab -e ²é¿´µ±Ç°Óû§µÄcrontabÈÎÎñÁбí crontab -l 3.2 `at`Óë`batch` `at`ÃüÁîÔÊÐíÓû§Ö¸¶¨ÔÚδÀ´µÄij¸ö¾ßÌåʱ¼äµãÖ´ÐÐÒ»´ÎÐÔÈÎÎñ
`batch`ÃüÁîÔòÊÇ`at`µÄÒ»¸ö±äÖÖ£¬ÓÃÓÚÔÚϵͳ¸ºÔؽϵÍʱִÐÐÈÎÎñ
ÔÚÃ÷ÌìÉÏÎç10µãÖ´ÐÐÈÎÎñ echo echo Hello, World! | at 10:00 tomorrow Ìá½»Ò»¸öÈÎÎñµ½batch¶ÓÁÐ echo heavy_computation_script.sh | batch 3.3 `systemd`¶¨Ê±Æ÷ Ëæ×Å`systemd`³ÉΪÏÖ´úLinux·¢ÐаæµÄ±ê×¼³õʼ»¯ÏµÍ³£¬ËüÌṩÁËÇ¿´óµÄ¶¨Ê±Æ÷¹¦ÄÜ£¬ÔÊÐíÓû§¶¨Òå»ùÓÚʱ¼ä»òʼþ´¥·¢µÄ·þÎñ
´´½¨Ò»¸ösystemd·þÎñµ¥ÔªÎļþ£¨/etc/systemd/system/mytimer.service£© ¡¾Unit¡¿ Description=My Timer Service ¡¾Service¡¿ ExecStart=/usr/bin/my_script.sh ´´½¨Ò»¸ösystemd¶¨Ê±Æ÷µ¥ÔªÎļþ£¨/etc/systemd/system/mytimer.timer£© ¡¾Unit¡¿ Description=My Timer ¡¾Timer¡¿ OnCalendar=-- 02:00:00 Persistent=true ¡¾Install¡¿ WantedBy=timers.target ÆôÓò¢Æô¶¯¶¨Ê±Æ÷£º ÆôÓö¨Ê±Æ÷ systemctl enable mytimer.timer Æô¶¯¶¨Ê±Æ÷ systemctl start mytimer.timer ËÄ¡¢¸ß¼¶Ó¦ÓÃÓëÓÅ»¯¼¼ÇÉ 4.1 ¸ß¾«¶È¶¨Ê±Æ÷ʵÏÖ ¶ÔÓÚÐèÒª¸ß¾«¶È¶¨Ê±£¨ÈçºÁÃë¼¶£©µÄÓ¦Ó㬿ÉÒÔ¿¼ÂÇʹÓÃÄں˶¨Ê±Æ÷»òʵʱLinux£¨ÈçPREEMPT_RT²¹¶¡£©À´Ìá¸ß¶¨Ê±¾«¶È
´ËÍ⣬ʹÓÃÓ²¼þ¼ÆÊ±Æ÷£¨Èç¸ß¾«¶ÈʱÖÓоƬ£©Ò²ÊÇÒ»ÖÖ½â¾ö·½°¸
4.2 ¶¨Ê±Æ÷ºÏ²¢Óë½ÚÄÜ ÎªÁ˼õÉÙϵͳ¿ªÏú£¬¿ÉÒÔ½«¶à¸öÏà½üʱ¼äµÄ¶¨Ê±Æ÷ºÏ²¢ÎªÒ»¸ö£¬¼õÉÙÖжϴÎÊý
´ËÍ⣬ÀûÓÃLinuxµÄ½ÚÄÜÌØÐÔ£¨ÈçticklessÄںˣ©£¬¿ÉÒÔÔÚ¿ÕÏÐʱ¼õÉÙʱÖÓÖÐ¶ÏÆµÂÊ£¬½µµÍ¹¦ºÄ
4.3 ¶¨Ê±Æ÷µ÷ÊÔÓë¼à¿Ø ʹÓù¤¾ßÈç`strace`¡¢`ltrace`ºÍ`gdb`¿ÉÒÔ¸ú×Ù¶¨Ê±Æ÷µÄÖ´Ðйý³Ì£¬°ïÖúµ÷ÊÔÎÊÌâ
ͬʱ£¬`top`¡¢`htop`ºÍ`vmstat`µÈϵͳ¼à¿Ø¹¤¾ß¿ÉÒÔ