BSD rc.d½Å±¾±à³Ìʵս

Yar Tikhiy

$FreeBSD: doc/zh_CN.GB2312/articles/rc-scripting/article.sgml,v 1.3 2010/01/20 13:28:06 loader Exp $

FreeBSD ÊÇ FreeBSD»ù½ð»áµÄ×¢²áÉ̱ê

NetBSDÊÇ NetBSD FoundationµÄ×¢²áÉ̱ꡣ

Ðí¶àÖÆÔìÉ̺;­ÏúÉÌʹÓÃһЩ³ÆÎªÉ̱êµÄͼ°¸»òÎÄ×ÖÉè¼ÆÀ´ÕÃÏÔ×Ô¼ºµÄ²úÆ·¡£ ±¾ÎĵµÖгöÏֵģ¬ Ϊ FreeBSD Project ËùÖªÏþµÄÉ̱꣬ºóÃæ½«ÒÔ '"' »ò '®' ·ûºÅÀ´±ê×¢¡£

¡¡¡¡³õѧÕß¿ÉÄܻᷢÏÖ£¬ÄÑÒÔͨ¹ýÕýʽµÄÎĵµ£¬ »ùÓÚ BSD µÄ rc.d ¿ò¼Ü£¬±àдһЩʵ¼ÊÈÎÎñµÄ rc.d ½Å±¾¡£ ±¾ÎÄÖУ¬ÎÒÃDzÉÓÃÁËһЩ¸´ÔÓÐÔ²»¶ÏÔö¼ÓµÄµäÐͰ¸Àý£¬ À´Õ¹Ê¾ÊʺÏÿ¸ö°¸ÀýµÄ rc.d ÌØÐÔ£¬ ²¢Ì½ÌÖÆäÖеŤ×÷Ô­Àí¡£ ÕâÑùµÄʵÑéΪ´ó¼Ò½øÒ»²½Ñо¿Éè¼ÆÓÐЧµÄ rc.d Ó¦ÓóÌÐòÌṩÁËһЩ²Î¿¼µã¡£


Ŀ¼
1 ¼ò½é
2 ÈÎÎñÃèÊö
3 ÐéÄâµÄ½Å±¾
4 ¿ÉÅäÖõÄÐéÄâ½Å±¾
5 Æô¶¯²¢Í£Ö¹¼òµ¥ÊØ»¤½ø³Ì
6 Æô¶¯²¢Í£Ö¹¸ß¼¶ÊØ»¤½ø³Ì
7 Á´½Ó½Å±¾µ½ rc.d ¿ò¼Ü
8 ¸øÓè rc.d ½Å±¾¸ü¶àµÄÁé»îÐÔ
9 ½øÒ»²½ÔĶÁ

1 ¼ò½é

¡¡¡¡ÀúÊ·ÉÏ BSD ÔøÓйýÒ»¸öµ¥Ò»µÄÆô¶¯½Å±¾£¬ /etc/rc¡£ ¸Ã½Å±¾ÔÚϵͳÆô¶¯µÄʱºò±» init(8) ³ÌÐòËùÒýµ¼£¬²¢Ö´ÐÐËùÓжàÓû§²Ù×÷ËùÐèÇóµÄÓû§¼¶ÈÎÎñ£º ¼ì²é²¢¹ÒÔØÎļþϵͳ£¬ÉèÖÃÍøÂ磬Æô¶¯ÊØ»¤½ø³Ì£¬µÈµÈ¡£ ÔÚÿ¸öϵͳÖÐʵ¼ÊµÄÈÎÎñÇåµ¥Ò²²¢²»Ïàͬ£» ¹ÜÀíÔ±ÐèÒª¸ù¾ÝÐèÇó×Ô¶¨ÒåÕâÑùµÄÈÎÎñÇåµ¥¡£ÔÚÒ»Ð©ÌØÊâµÄÇé¿öÖУ¬ »¹²»µÃ²»È¥ÐÞ¸Ä /etc/rc Îļþ£¬ Ò»Ð©ÕæÕýµÄºÚ¿ÍÀִ˲»Æ£¡£

¡¡¡¡µ¥Ò»½Å±¾Æô¶¯·½·¨µÄÕæÕýÎÊÌâÊÇËüûÓÐÌṩ¶Ô´Ó /etc/rc Æô¶¯µÄµ¥¸ö×é¼þµÄ¿ØÖÆ¡£ ÄÃÒ»¸öÀý×ÓÀ´Ëµ°É£¬/etc/rc ²»Äܹ»ÖØÐÂÆô¶¯Ä³¸öµ¥¶ÀµÄÊØ»¤½ø³Ì¡£ ϵͳ¹ÜÀíÔ±²»µÃ²»ÊÖ¶¯ÕÒ³öÊØ»¤½ø³Ì£¬²¢É±µôËü£¬ µÈ´ýËüÕæÕýÍ˳öºó£¬ÔÙͨ¹ýä¯ÀÀ /etc/rc µÃµ½¸ÃÊØ»¤½ø³ÌµÄ±êʶ£¬×îÖÕÊäÈëÈ«²¿ÃüÁîÀ´ÔÙ´ÎÆô¶¯ÊØ»¤½ø³Ì¡£ Èç¹ûÖØÐÂÆô¶¯µÄ·þÎñ°üÀ¨²»Ö¹Ò»¸öÊØ»¤½ø³Ì»òÐèÒª¸ü¶à¶¯×÷µÄ»°£¬ ¸ÃÈÎÎñ½«±äµÃ¸ü¼ÓÀ§ÄÑÒÔ¼°ÈÝÒ׳ö´í¡£¼ò¶øÑÔÖ®£¬ µ¥Ò»½Å±¾ÔÚʵÏÖÎÒÃÇÕâÑùµÄÄ¿µÄÉÏÊDz»³É¹¦µÄ£º ÈÃϵͳ¹ÜÀíÔ±µÄÉú»î¸üÇáËÉ¡£

¡¡¡¡ÔÙºóÀ´£¬ÎªÁ˽«×îÖØÒªµÄһЩ×Óϵͳ¶ÀÁ¢³öÀ´£¬ ±ã³¢ÊÔ½«²¿·ÖµÄÄÚÈÝ´Ó /etc/rc ·ÖÀë³öÀ´ÁË¡£ ×î¹ãΪÈËÖªµÄÀý×Ó¾ÍÊÇÓÃÀ´Æô¶¯ÁªÍøµÄ /etc/netstart Îļþ¡£ËüÈÝÐí´Óµ¥Óû§Ä£Ê½·ÃÎÊÍøÂ磬 µ«ÓÉÓÚËüµÄ²¿·Ö´úÂëÐèÒªºÍһЩÓëÁªÍøÍêÈ«Î޹ص͝×÷½»»¥£¬ ËùÒÔËü²¢Ã»ÓÐÍêÃÀµØ½áºÏµ½×ÔÆô¶¯µÄ½ø³ÌÖС£ÄDZãÊÇΪºÎ /etc/netstart ±»Ñݱä³É /etc/rc.network µÄÔ­ÒòÁË¡£ ºóÕß²»ÔÙÊÇÒ»¸öÆÕͨµÄ½Å±¾£»Ëü°üÀ¨ÁËÅÓ´óµÄ£¬ÓÉ /etc/rc ÔÚ²»Í¬µÄϵͳÆô¶¯¼¶±ðÖе÷ÓõÄÁèÂÒµÄ sh(1) º¯Êý¡£È»¶ø£¬µ±Æô¶¯ÈÎÎñ±äµÃ¶àÑù»¯ÒÔ¼°¾Ã¾­¸ü¸Ä£¬ ¡°ÀàÄ£¿é»¯¡± ·½·¨±äµÃ±ÈÔø¾­µÄÕûÌå /etc/rc ¸ü»ºÂý·ÑÊ¡£

¡¡¡¡ÓÉÓÚûÓÐÒ»¸ö¸É¾»ºÍÒ×ÓÚÉè¼ÆµÄ¿ò¼Ü£¬ Æô¶¯½Å±¾²»µÃ²»È«Á¦¸ü¸ÄÒÔÂú×ã·ÉËÙ¿ª·¢ÖлùÓÚ BSD µÄ²Ù×÷ϵͳµÄÐèÇó¡£ ËüÖð½¥±äµÃÃ÷Àʲ¢¾­¹ýÐí¶à±ØÒªµÄ²½Öè×îÖÕ±ä³ÉÒ»¸ö¾ßÓÐϸÃÜÐÔºÍÀ©Õ¹Ð﵀ rc ϵͳ¡£BSD rc.d ¾ÍÕâÑùµ®ÉúÁË¡£Luke Mewburn ºÍ NetBSD ÉçÇøÊǹ«È쵀 rc.d Ö®¸¸¡£ÔÙÖ®ºóËü±»ÒýÈëµ½ÁË FreeBSD ÖС£ ËüµÄÃû×ÖÒýÓÃΪϵͳµ¥¶ÀµÄ·þÎñ½Å±¾µÄλÖã¬Ò²¾ÍÊÇ /etc/rc.dÏÂÃæµÄÄÇЩ½Å±¾¡£ Ö®ºóÎÒÃǽ«Ñ§Ï°µ½¸ü¶àµÄ rc.d ϵͳµÄ×é¼þ²¢¿´¿´µ¥¸ö½Å±¾ÊÇÈçºÎ±»µ÷Óõġ£

¡¡¡¡BSD rc.d ±³ºóµÄ»ù±¾ÀíÄîÊÇ Á¼ºÃ µÄÄ£¿é»¯ºÍ´úÂëÖØÓÃÐÔ¡£ Á¼ºÃ µÄÄ£¿é»¯Òâζ×Åÿ¸ö»ù±¾ ¡°·þÎñ¡± ¾ÍÏóÏµÍ³ÊØ»¤½ø³Ì»òԭʼÆô¶¯ÈÎÎñÄÇÑù£¬ ͨ¹ýÊôÓÚËüÃÇµÄ¿ÉÆô¶¯¸Ã·þÎñµÄ sh(1) ½Å±¾£¬À´Í£Ö¹·þÎñ£¬ ÖØÔØ·þÎñ£¬¼ì²é·þÎñµÄ״̬¡£¾ßÌ嶯×÷Óɽű¾µÄÃüÁîÐвÎÊýËù¾ö¶¨¡£ /etc/rc ½Å±¾ÈÔÈ»ÕÆ¹Ü×ÅϵͳµÄÆô¶¯£¬ µ«ÏÖÔÚËü½ö½öÊÇʹÓà start ²ÎÊýÀ´Ò»¸ö¸öµ÷ÓÃÄÇЩСµÄ½Å±¾¡£ Õâ±ãÓÚÓà stop À´¶ÔÔËÐÐÖеÄͬÑùµÄ½Å±¾ºÜºÃµØÖ´ÐÐÍ£Ö¹ÈÎÎñ£¬ ÕâÊDZ» /etc/rc.shutdown ½Å±¾ËùÍê³ÉµÄ¡£¿´£¬ÕâÊǶàôºÃµØÌåÏÖÁË Unix µÄÕÜѧ£º ÓµÓÐÒ»×éСµÄרÓõŤ¾ß£¬Ã¿¸ö¹¤¾ß¾¡¿ÉÄܺõØÍê³É×Ô¼ºµÄÈÎÎñ¡£ ´úÂëÖØÓà Òâζ×ÅËùÓеÄͨÓòÙ×÷ÓÉ /etc/rc.subr ÖеÄһЩ sh(1) º¯ÊýËùʵÏÖ¡£ ÏÖÔÚÒ»¸öµäÐ͵Ľű¾Ö»ÐèÒªÁÈÁȼ¸ÐÐµÄ sh(1) ´úÂë¡£×îÖÕ£¬ rcorder(8) ³ÉΪÁË rc.d ¿ò¼ÜÖÐÖØÒªµÄÒ»²¿·Ö£¬ ËüÓÃÀ´°ïÖú /etc/rc ´¦ÀíС½Å±¾Ö®¼äµÄÒÀÀµ¹ØÏµ²¢ÓдÎÐòµØÔËÐÐËüÃÇ¡£ËüͬÑù°ïÖú /etc/rc.shutdown ×öÀàËÆµÄÊÂÇ飬 ÒòΪÕýÈ·µÄ¹Ø±Õ´ÎÐòÊÇÏà¶ÔÓÚÆô¶¯µÄ´ÎÐòµÄ¡£

¡¡¡¡BSD rc.d µÄÉè¼ÆÔÚ Luke Mewburn µÄÔ­ÎÄ ÖÐÓмǼ£¬ ÒÔ¼° rc.d ×é¼þÒ²±»³ä·ÖÏêϸµØ¼Ç¼ÔÚ¸÷×﵀ Áª»úÊÖ²á ÖС£È»¶ø£¬ Ëü¿ÉÄÜûÄÜÇåÎúÕ¹ÏÖ¸øÒ»¸ö rc.d ÐÂÊÖ£¬ÈçºÎ½«ÎÞÊýµÄ¿éºÍƬ½øÐйØÁªÀ´Îª¾ßÌåµÄÈÎÎñ´´½¨Ò»¸öºÃ·ç¸ñµÄ½Å±¾¡£ Òò´Ë±¾ÎĽ«ÊÔ×ÅÒÔ²»Í¬µÄ·½Ê½À´½²Êö rc.d¡£ Ëü½«Õ¹Ê¾ÔÚijЩµäÐÍÇé¿öÖÐÓ¦¸ÃʹÓÃÄÄÐ©ÌØÐÔ£¬²¢²ûÊöÁËΪºÎÈç´Ë¡£ ×¢ÒâÕâ²¢²»ÊÇһƪ how-to Îĵµ£¬ÎÒÃǵÄÄ¿µÄ²»ÊǸø³öÏֳɵÄÅä·½£¬ ¶øÊÇÔÚչʾһЩ¼òµ¥µÄ½øÈë rc.d µÄ·¶Î§µÄÃÅ·¡£ ±¾ÎÄÒ²²»ÊÇÏà¹ØÁª»úÊÖ²áµÄÌæ´úÆ·¡£ ÔĶÁ±¾ÎÄʱ¼ÇµÃͬʱ²Î¿¼Áª»úÊÖ²áÒÔ»ñÈ¡¸üÍêÕûÕý¹æµÄÎĵµ¡£

¡¡¡¡Àí½â±¾ÎÄÐèҪһЩÏȾöÌõ¼þ¡£Ê×ÏÈ£¬ÄãÐèÒªÊìϤ sh(1) ½Å±¾±à³ÌÓïÑÔÒÔÕÆÎÕ rc.d£¬ »¹ÓУ¬ÄãÐèÒªÖªµÀϵͳÊÇÈçºÎÖ´ÐÐÓû§¼¶µÄÆô¶¯ºÍÍ£Ö¹ÈÎÎñ£¬ÕâЩÔÚ rc(8) Öж¼ÓÐ˵Ã÷¡£

¡¡¡¡±¾ÎĹØ×¢µÄÊÇ rc.d µÄ FreeBSD ·ÖÖ§¡£ ²»¹ý£¬Ëü¿ÉÄÜ¶Ô NetBSD µÄ¿ª·¢ÕßҲͬÑùÓÐÓã¬ÒòΪ BSD rc.d µÄÁ½¸ö·ÖÖ§²»Ö»Êǹ²ÏíÁËͬÑùµÄÉè¼Æ£¬ »¹±£ÁôÁ˶Խű¾±àдÕß¶¼¿É¼ûµÄÀàËÆ¹Ûµã¡£


2 ÈÎÎñÃèÊö

¡¡¡¡ÔÚ¿ªÊ¼´ò¿ª $EDITOR£¨±à¼­Æ÷£© ֮ǰ½øÐÐССµÄ˼¿¼²»ÊÇ»µÊ¡£ÎªÁ˸øÒ»¸öϵͳ·þÎñдһ¸ö ¡°Ìý»°µÄ¡± rc.d ½Å±¾£¬ ÎÒÃÇÊ×ÏÈÓ¦¸ÃÄܻشðÒÔÏÂÎÊÌ⣺

¡¡¡¡´ÓÏÂÃæµÄÀý×ÓÖÐÎÒÃǽ«¿´µ½£¬ÎªÊ²Ã´ËµÖªµÀÕâЩÎÊÌâµÄ´ð°¸ÊǺÜÖØÒªµÄ¡£


3 ÐéÄâµÄ½Å±¾

¡¡¡¡ÏÂÃæµÄ½Å±¾ÊÇÓÃÀ´ÔÚÿ´ÎϵͳÆô¶¯Ê±·¢³öÒ»¸öÐÅÏ¢£º

#!/bin/sh(1)

. /etc/rc.subr(2)

name="dummy"(3)
start_cmd="${name}_start"(4)
stop_cmd=":"(5)

dummy_start()(6)
{
        echo "Nothing started."
}

load_rc_config $name(7)
run_rc_command "$1"(8)

¡¡¡¡ÐèҪעÒâµÄÊÇ£º

(1)
Ò»¸ö½âÊÍÐԵĽű¾Ó¦¸ÃÒÔÒ»ÐÐħ»ÃµÄ ¡°shebang¡± ÐпªÍ·¡£ ¸ÃÐÐÖ¸¶¨Á˽ű¾µÄ½âÎö³ÌÐò¡£ÓÉÓÚ shebang ÐеÄ×÷Ó㬠¼ÙÈçÔÙÓпÉÖ´ÐÐλµÄÉèÖ㬠½Å±¾¾ÍÄÜÏóÒ»¸ö¶þ½øÖƳÌÐòÒ»Ñù±»¾«È·µØµ÷ÓÃÖ´ÐС£ £¨Çë²Î¿¼ chmod(1)¡££© ÀýÈ磬 Ò»¸öϵͳ¹ÜÀíÔ±¿ÉÒÔ´ÓÃüÁîÐÐÊÖ¶¯ÔËÐÐÎÒÃǵĽű¾£º
# /etc/rc.d/dummy start

×¢Òâ: ΪÁËʹ rc.d ¿ò¼ÜÕýÈ·µØ¹ÜÀí½Å±¾£¬ ËüµÄ½Å±¾ÐèÒªÓà sh(1) ÓïÑÔ±àд¡£ Èç¹ûÄãµÄij¸ö·þÎñ»ò port Ì×¼þʹÓÃÁ˶þ½øÖÆ¿ØÖƳÌÐò»òÊÇÓÃÆäËüÓïÑÔ±àдµÄÀý³Ì£¬ Ç뽫Æä×é¼þ°²×°µ½ /usr/sbin£¨Ïà¶ÔÓÚϵͳ£© »ò /usr/local/sbin£¨Ïà¶ÔÓÚports£©£¬ È»ºó´ÓºÏÊ浀 rc.d Ŀ¼µÄij¸ö sh(1) ½Å±¾µ÷ÓÃËü¡£

Ìáʾ: Èç¹ûÄãÏëÖªµÀΪʲô rc.d ½Å±¾±ØÐëÓà sh(1) ÓïÑÔ±àдµÄϸ½Ú£¬ÏÈ¿´Ï /etc/rc ÊÇÈçºÎÒÀ¿¿ run_rc_script µ÷ÓÃËüÃÇ£¬ È»ºóÔÙȥѧϰ /etc/rc.subr Ï run_rc_script µÄÏà¹ØÊµÏÖ¡£

(2)
ÔÚ /etc/rc.subr Ï£¬ ÓÐÐí¶à¶¨Òå¹ýµÄ sh(1) º¯Êý¿É¹©Ã¿¸ö rc.d ½Å±¾Ê¹Óá£ÕâЩº¯ÊýÔÚ rc.subr(8) Öж¼ÓÐ˵Ã÷¡£¾¡¹ÜÀíÂÛÉÏ¿ÉÒÔÍêÈ«²»Ê¹Óà rc.subr(8) À´±àдһ¸ö rc.d ½Å±¾£¬µ«ËüµÄº¯ÊýÒѾ­Ö¤Ã÷ÁËËüÕæµÄºÜ·½±ã£¬ ²¢ÇÒÄÜʹÈÎÎñ¸ü¼ÓµÄ¼òµ¥¡£ËùÒÔËùÓÐÈËÔÚ±àд rc.d ½Å±¾Ê±¶¼»áÇóÖúÓÚ rc.subr(8) Ò²²»×ãÎªÆæÁË¡£µ±È»ÎÒÃÇÒ²²»ÀýÍâ¡£

Ò»¸ö rc.d ½Å±¾ÔÚÆäµ÷Óà rc.subr(8) º¯Êý֮ǰ±ØÐëÏÈ ¡°source¡± /etc/rc.subr£¨Óà ¡°.¡±½«Æä°üº¬½øÈ¥£©£¬ ¶øÊ¹ sh(1) ³ÌÐòÓлú»áÀ´»ñϤÄÇЩº¯Êý¡£ Ê×Ñ¡·ç¸ñÊÇÔڽű¾µÄ×ʼ source /etc/rc.subr Îļþ¡£

×¢Òâ: ijЩÓÐÓõÄÓëÁªÍøÓйصĺ¯ÊýÓÉÁíÒ»¸ö±»°üº¬½øÀ´µÄÎļþÌṩ£¬ /etc/network.subr Îļþ¡£

(3)
Ç¿ÖÆµÄ±äÁ¿ name Ö¸¶¨ÎÒÃǽű¾µÄÃû×Ö¡£ ÕâÊÇ rc.subr(8) ËùÇ¿µ÷µÄ¡£Ò²¾ÍÊÇ£¬ ÿ¸ö rc.d ½Å±¾ÔÚµ÷Óà rc.subr(8) µÄº¯Êý֮ǰ±ØÐëÉèÖà name ±äÁ¿¡£

ÏÖÔÚÊÇʱºòÀ´ÎªÎÒÃǵĽű¾Ò»´ÎÐÔÑ¡ÔñÒ»¸ö¶ÀÒ»ÎÞ¶þµÄÃû×ÖÁË¡£ ÔÚ±àдÕâ¸ö½Å±¾µÄʱÎÒÃǽ«ÔÚÐí¶àµØ·½Óõ½Ëü¡£ÔÚ¿ªÊ¼Ö®Ç°£¬ ÎÒÃÇÀ´¸ø½Å±¾ÎļþҲȡ¸öÏàͬµÄÃû×Ö¡£

×¢Òâ: µ±Ç°µÄ rc.d ½Å±¾·ç¸ñÊǰÑÖµ·ÅÔÚË«ÒýºÅÖÐÀ´¸ø±äÁ¿¸³Öµ¡£ Çë¼ÇסÕâÖ»ÊǸö·ç¸ñÎÊÌ⣬¿ÉÄܲ¢²»×ÜÊÇÕâÑù¡£ Äã¿ÉÒÔÔÚÖ»ÊǼòµ¥µÄ²¢²»°üÀ¨ sh(1) Ôª×Ö·ûµÄ´Ê¾äÖзÅÐĵØÊ¡ÂÔµôÒýºÅ£¬ ¶øÔÚijЩÇé¿öÏÂÄ㽫ÐèҪʹÓõ¥ÒýºÅÒÔ·ÀÖ¹ sh(1) ¶ÔÈκεıäÁ¿µÄ½âÊÍ¡£ ³ÌÐòÔ±ÊÇ¿ÉÒÔÁéÇɵØÓÉ·ç¸ñ¹ßÀý»ñϤÆäÓï·¨ÒÔ¼°Ê¹Óõġ£

(4)
rc.subr(8) ±³ºóÖ÷ÒªµÄ¹¹Ë¼ÊÇ rc.d ½Å±¾Ìṩ´¦Àí³ÌÐò£¬»òÕß·½·¨£¬À´Èà rc.subr(8) µ÷Óá£ÌرðÊÇ£¬start£¬ stop£¬ÒÔ¼°ÆäËüµÄ rc.d ½Å±¾²ÎÊý¶¼ÊÇÕâÑù±»´¦ÀíµÄ¡£·½·¨ÊÇ´æ´¢ÔÚÒ»¸öÒÔ argument_cmd ÐÎʽÃüÃûµÄ±äÁ¿ÖÐµÄ sh(1) ±í´ïʽ£¬¸Ã argument ¶ÔӦ׎ű¾ÃüÁîÐÐÖÐËùÌØ±ðÖ¸¶¨µÄ²ÎÊý¡£ÎÒÃÇÉԺ󽫿´µ½ rc.subr(8) ÊÇÈçºÎΪ±ê×¼²ÎÊýÌṩĬÈÏ·½·¨µÄ¡£

×¢Òâ: ΪÁËÈà rc.d ÖеĴúÂë¸ü¼Óͳһ£¬ ³£¼ûµÄÊÇÔÚÈκÎÊʺϵĵط½¶¼Ê¹Óà ${name} ÐÎʽ¡£ ÕâÑùÒ»À´£¬¿ÉÒÔÇáËɵؽ«Ò»Ð©´úÂë´ÓÒ»¸ö½Å±¾¿½±´µ½ÁíÒ»¸öÖÐʹÓá£

(5)
ÎÒÃÇÓ¦½÷¼Ç rc.subr(8) Ϊ±ê×¼²ÎÊýÌṩÁËĬÈϵķ½·¨¡£ Òò´Ë£¬Èç¹ûÏ£ÍûËüʲô¶¼²»×öµÄ»°£¬ÎÒÃDZØÐëʹÓÃÎÞ²Ù×÷µÄ sh(1) ±í´ïʽÀ´¸Äд±ê×¼µÄ·½·¨¡£
(6)
±È½Ï¸´Ôӵķ½·¨Ö÷Ìå¿ÉÒÔÓú¯ÊýÀ´ÊµÏÖ¡£ ÔÚÄܹ»±£Ö¤º¯ÊýÃûÓÐÒâÒåµÄÇé¿öÏ£¬ÕâÊǸöºÜ²»´íµÄÏë·¨¡£

ÖØÒª: Ç¿ÁÒÍÆ¼ö¸øÎÒÃǽű¾ÖÐËù¶¨ÒåµÄËùÓк¯ÊýÃû¶¼Ìí¼ÓÀàËÆ ${name} ÕâÑùµÄǰ׺£¬ÒÔʹËüÃÇÓÀÔ¶²»»áºÍ rc.subr(8) »òÆäËü¹«Óðüº¬ÎļþÖеĺ¯Êý³åÍ»¡£

(7)
ÕâÊÇÔÚÇëÇó rc.subr(8) ÔØÈë rc.conf(5) ±äÁ¿¡£ ¾¡¹ÜÎÒÃÇÕâ¸ö½Å±¾ÖÐʹÓõıäÁ¿²¢Ã»Óб»ÆäËüµØ·½Ê¹Ó㬵«ÓÉÓÚ rc.subr(8) ×ÔÉíËù¿ØÖÆ×ÅµÄ rc.conf(5) ±äÁ¿´æÔÚµÄÔ­Òò£¬ÈÔÈ»ÍÆ¼ö½Å±¾È¥×°ÔØ rc.conf(5)¡£
(8)
ͨ³£ÕâÊÇ rc.d ½Å±¾µÄ×îºóÒ»¸öÃüÁî¡£ Ëüµ÷Óà rc.subr(8) ÌåϵʹÓÃÎÒÃǽű¾ËùÌṩµÄ±äÁ¿ºÍ·½·¨À´Ö´ÐÐÏàÓ¦µÄÇëÇó¶¯×÷¡£

4 ¿ÉÅäÖõÄÐéÄâ½Å±¾

¡¡¡¡ÏÖÔÚÎÒÃÇÀ´¸øÎÒÃǵÄÐéÄâ½Å±¾Ôö¼ÓһЩ¿ØÖƲÎÊý°É¡£ÕýÈçÄãËùÖª£¬ rc.d ½Å±¾ÊÇÓÉ rc.conf(5) Ëù¿ØÖƵġ£ ÐÒÔ˵ÄÊÇ£¬rc.subr(8) Òþ²ØÁËËùÓи´ÔÓ»¯µÄ¶«Î÷¡£ ÏÂÃæÕâ¸ö½Å±¾Ê¹Óà rc.conf(5) ͨ¹ý rc.subr(8) À´²é¿´ËüÊÇ·ñÔÚµÚÒ»¸öµØ·½±»ÆôÓ㬲¢»ñȡһÌõÐÅÏ¢ÔÚÆô¶¯Ê±ÏÔʾ¡£ ÊÂʵÉÏÕâÁ½¸öÈÎÎñÊÇÏ໥¶ÀÁ¢µÄ¡£Ò»·½Ã棬rc.d ½Å±¾ÒªÄܹ»Ö§³ÖÆô¶¯ºÍ½ûÓÃËüµÄ·þÎñ¡£ÁíÒ»·½Ã棬 rc.d ½Å±¾±ØÐëÄܾ߱¸ÅäÖÃÐÅÏ¢±äÁ¿¡£ ÎÒÃǽ«Í¨¹ýÏÂÃæÍ¬Ò»½Å±¾À´ÑÝʾÕâÁ½·½ÃæµÄÄÚÈÝ£º

#!/bin/sh

. /etc/rc.subr

name="dummy"
rcvar=`set_rcvar`(1)
start_cmd="${name}_start"
stop_cmd=":"

load_rc_config $name(2)
eval "${rcvar}=\${${rcvar}:-'NO'}"(3)
dummy_msg=${dummy_msg:-"Nothing started."}(4)

dummy_start()
{
        echo "$dummy_msg"(5)
}

run_rc_command "$1"

¡¡¡¡ÔÚÕâ¸öÑùÀýÖиıäÁËʲô£¿

(1)
±äÁ¿ rcvar Ö¸¶¨ÁË ON/OFF ¿ª¹Ø±äÁ¿µÄÃû×Ö¡£°üº¬À´×Ô rc.subr(8) ÖбäÁ¿ÃûÊÇΪÁ˵÷Óò»Í¬²Ù×÷ϵͳËù²ÉÓõIJ»Í¬¹æ¶¨µÄ set_rcvar¡£Ò²¾ÍÊÇ˵£¬FreeBSD ¼á³ÖʹÓà ${name}_enable Ñùʽ¶ø NetBSD µÄ rc.conf(5) ÖÐʹÓõÄÖ»ÊÇ ${name} ±äÁ¿µÄÐÎʽ¡£ÀýÈ磬ÎÒÃÇÔÚ FreeBSD ÖÐʹÓà dummy_enable À´¿ØÖÆÎÒÃǵĽű¾¶øÔÚ NetBSD ÖÐʹÓà dummy À´¿ØÖÆ¡£
(2)
ÏÖÔÚ load_rc_config ÔÚÈκΠrc.conf(5) ±äÁ¿±»·ÃÎÊ֮ǰ¾ÍÔڽű¾Öб»Ô¤Ïȵ÷Óá£

×¢Òâ: ¼ì²é rc.d ½Å±¾Ê±£¬ÇÐ¼Ç sh(1) »á°Ñº¯ÊýÑÓ³Ùµ½Æä±»µ÷ÓÃʱ²Å¶ÔÆäÖеıí´ïʽ½øÐÐÇóÖµÔËËã¡£ Òò´Ë¾¡¿ÉÄÜÍíµØÔÚ run_rc_command ֮ǰµ÷Óà load_rc_config£¬ ÒÔ¼°ÈÔÈ»·ÃÎÊ´Ó·½·¨º¯ÊýÊä³öµ½ run_rc_command µÄ rc.conf(5) ±äÁ¿²¢²»ÊÇÒ»¸ö´íÎó¡£ÕâÊÇÒòΪ·½·¨º¯Êý½«ÔÚ load_rc_config Ö®ºó£¬ ±»µ÷ÓÃµÄ run_rc_command µ÷Óá£

(3)
Èç¹û×ÔÉíÉèÖÃÁË rcvar£¬ µ«Ö¸Ê¾¿ª¹Ø±äÁ¿È´Î´±»ÉèÖã¬ÄÇô run_rc_command ½«·¢³öÒ»¸ö¾¯¸æ¡£Èç¹ûÄãµÄ rc.d ½Å±¾ÊÇΪ»ù±¾ÏµÍ³ËùÓõģ¬ÄãÓ¦µ±ÔÚ /etc/defaults/rc.conf Öиø¿ª¹Ø±äÁ¿Ìí¼ÓÒ»¸öĬÈϵÄÉèÖò¢½«Æä±ê×¢ÔÚ rc.conf(5) ÖС£ ·ñÔòµÄ»°ÄãµÄ½Å±¾Ó¦¸Ã¸ø¿ª¹Ø±äÁ¿Ìṩһ¸öĬÈÏÉèÖᣠ·¶ÀýÖÐÑÝʾÁËÒ»¸ö¿ÉÒÆÖ²½Ó½üÓÚºóÕßÇé¿öµÄ°¸Àý¡£

×¢Òâ: Äã¿ÉÒÔͨ¹ý½«¿ª¹Ø±äÁ¿ÉèÖÃΪ ON À´Ê¹ rc.subr(8) ÓÐЧ£¬ ʹÓà one »ò force Ϊ½Å±¾µÄ²ÎÊý¼Óǰ׺£¬Èç onestart »ò forcestop ÕâÑù£¬»áºöÂÔÆäµ±Ç°µÄÉèÖᣠÇÐ¼Ç force ÔÚÎÒÃÇÏÂÃæÒªÌáµ½µÄÇé¿öÏÂÓжîÍâµÄΣÏÕºó¹û£¬ÄǾÍÊǵ±Óà one ¸ÄдÁË ON/OFF ¿ª¹Ø±äÁ¿¡£ÀýÈ磬 ¼Ù¶¨ dummy_enable ÊÇ OFF µÄ£¬¶øÏÂÃæµÄÃüÁºöÂÔϵͳÉèÖöøÇ¿ÐÐÔËÐÐ start·½·¨£º

# /etc/rc.d/dummy onestart
(4)
ÏÖÔÚÆô¶¯Ê±ÏÔʾµÄÐÅÏ¢²»ÔÙÊÇÓ²±àÂëÔڽű¾ÖеÄÁË¡£ ËüÊÇÓÉÒ»¸öÃüÃûΪ dummy_msg µÄ rc.conf(5) ±äÁ¿ËùÖ¸¶¨µÄ¡£Õâ¾ÍÊÇ rc.conf(5) ±äÁ¿ÈçºÎÀ´¿ØÖÆ rc.d ½Å±¾µÄÒ»¸öСÀý×Ó¡£

ÖØÒª: ÎÒÃǵĽű¾Ëù¶ÀռʹÓõÄËùÓÐ rc.conf(5) ±äÁ¿Ãû£¬ ¶¼±ØÐë¾ßÓÐͬÑùµÄǰ׺£º${name}¡£ ÀýÈ磺dummy_mode£¬ dummy_state_file£¬µÈµÈ¡£

×¢Òâ: µ±¿ÉÒÔÄÚ²¿Ê¹ÓÃÒ»¸ö¼ò¶ÌµÄÃû×Öʱ£¬Èç msg ÕâÑù£¬ÎªÎÒÃǵĽű¾ËùÒý½øµÄÈ«²¿µÄ¹²ÓÃÃûÌí¼ÓΨһµÄǰ׺ ${name}£¬Äܹ»±ÜÃâÎÒÃÇÓë rc.subr(8) ÃüÃû¿Õ¼ä³åÍ»µÄ¿ÉÄÜ¡£

Ö»ÒªÒ»¸ö rc.conf(5) ±äÁ¿ÓëÆäÄÚ²¿µÈֵͬÊÇÏàͬµÄ£¬ ÎÒÃǾÍÄܹ»Ê¹ÓÃÒ»¸ö¸ü¼Ó¼æÈݵıí´ïʽÀ´ÉèÖÃĬÈÏÖµ£º

: ${dummy_msg:="Nothing started."}

¾¡¹ÜĿǰµÄ·ç¸ñÊÇʹÓÃÁ˸üÏêϸµÄÐÎʽ¡£

ͨ³££¬»ù±¾ÏµÍ³µÄ rc.d ½Å±¾²»ÐèҪΪËüÃÇµÄ rc.conf(5) ±äÁ¿ÌṩĬÈÏÖµ£¬ ÒòΪĬÈÏÖµÓ¦¸ÃÊÇÔÚ /etc/defaults/rc.conf ÉèÖùýÁË¡£µ«ÁíÒ»·½Ã棬Ϊ ports ËùÓÃµÄ rc.d ½Å±¾Ó¦ÌṩÈç·¶ÀýËùʾµÄĬÈÏÉèÖá£

(5)
ÕâÀïÎÒÃÇʹÓà dummy_msg À´Êµ¼ÊµØ¿ØÖÆÎÒÃǵĽű¾£¬¼´£¬·¢Ò»¸ö±äÁ¿ÐÅÏ¢¡£

5 Æô¶¯²¢Í£Ö¹¼òµ¥ÊØ»¤½ø³Ì

¡¡¡¡ÎÒÃÇÔçÏÈ˵¹ý rc.subr(8) ÊÇÄܹ»ÌṩĬÈÏ·½·¨µÄ¡£ ÏÔÈ»£¬ÕâЩĬÈÏ·½·¨²¢²»ÊÇ̫ͨÓõġ£ ËüÃǶ¼ÊÇÊÊÓÃÓÚ´ó¶àÊýÇé¿öÏÂÀ´Æô¶¯ºÍÍ£Ö¹Ò»¸ö¼òµ¥µÄÊØ»¤½ø³Ì¿ö¡£ ÎÒÃÇÀ´¼ÙÉèÏÖÔÚÐèҪΪһ¸ö½Ð×ö mumbled µÄÊØ»¤½ø³Ì±àдһ¸ö rc.d½Å±¾£¬ ÔÚÕâÀ/para>

#!/bin/sh

. /etc/rc.subr

name="mumbled"
rcvar=`set_rcvar`
command="/usr/sbin/${name}"(1)

load_rc_config $name
run_rc_command "$1"

¡¡¡¡¸Ðµ½ºÜ¼òµ¥°É£¬²»ÊÇô£¿ÎÒÃÇÀ´¼ì²éÏÂÎÒÃÇÕâ¸öС½Å±¾¡£ Ö»ÐèҪעÒâÏÂÃæµÄÕâЩÐÂ֪ʶµã£º

(1)
Õâ¸ö command ±äÁ¿¶ÔÓÚ rc.subr(8) À´ËµÊÇÓÐÒâÒåµÄ¡£µ±Ëü±»ÉèÖÃʱ£¬ rc.subr(8) ½«¸ù¾ÝÌṩ´«Í³ÊØ»¤½ø³ÌµÄÇéÐζøÉúЧ¡£ ÌØ±ðÊÇ£¬½«ÎªÕâЩ²ÎÊýÌṩĬÈϵķ½·¨£º start£¬stop£¬ restart£¬poll£¬ ÒÔ¼° status¡£

¸ÃÊØ»¤½ø³Ì½«»áÓÉÔËÐÐÖÐµÄ $command ÅäºÏÓÉ $mumbled_flags ËùÖ¸¶¨µÄÃüÁîÐбêÖÄÀ´Æô¶¯¡£ Òò´Ë£¬¶ÔĬÈ쵀 start ·½·¨À´Ëµ£¬ ËùÓеÄÊäÈëÊý¾ÝÔÚÎÒÃǽű¾±äÁ¿¼¯ºÏÖж¼¿ÉÓá£Óë start ²»Í¬µÄÊÇ£¬ ÆäËû·½·¨¿ÉÄÜÐèÒªÓë½ø³ÌÆô¶¯Ïà¹ØµÄ¶îÍâÐÅÏ¢¡£¾Ù¸öÀý×Ó£¬ stop ±ØÐëÖªµÀ½ø³ÌµÄ PID ºÅÀ´ÖÕ½á½ø³Ì¡£ ÔÚĿǰµÄÇé¿öÖУ¬rc.subr(8) ½«É¨ÃèÈ«²¿½ø³ÌµÄÇåµ¥£¬ ²éÕÒÒ»¸öÃû×ÖµÈͬÓÚ $procname µÄ½ø³Ì¡£ ºóÕßÊÇÁíÒ»¸ö¶Ô rc.subr(8) ÓÐÒâÒåµÄ±äÁ¿£¬ ²¢ÇÒĬÈÏËüµÄÖµ¸ú command Ò»Ñù¡£ »»¶øÑÔÖ®£¬µ±ÎÒÃǸø command ÉèÖÃÖµºó£¬ procname ʵ¼ÊÉÏÒ²ÉèÖÃÁËͬÑùµÄÖµ¡£ ÕâÆô¶¯ÎÒÃǵĽű¾À´É±ËÀÊØ»¤½ø³Ì²¢¼ì²éËüÊÇ·ñÕýÔÚµÚÒ»¸öλÖÃÔËÐС£

×¢Òâ: ijЩ³ÌÐòʵ¼ÊÉÏÊÇ¿ÉÖ´ÐеĽű¾¡£ ϵͳÆô¶¯½Å±¾µÄ½âÊÍÆ÷ÒÔ´«µÝ½Å±¾ÃûΪÃüÁîÐвÎÊýµÄÐÎʽÀ´ÔËÐнű¾¡£ È»ºó±»Ó³Éäµ½½ø³ÌÁбíÖУ¬Õâ»áʹ rc.subr(8) ÃÔ»ó¡£Òò´Ë£¬µ± $command ÊÇÒ»¸ö½Å±¾µÄʱ£¬ÄãÓ¦¸Ã¶îÍâµØÉèÖà command_interpreter À´Èà rc.subr(8) ÖªÏþ½ø³ÌµÄʵ¼ÊÃû×Ö¡£

¶Ôÿ¸ö rc.d ½Å±¾¶øÑÔ£¬ ÓÐÒ»¸ö¿ÉÑ¡µÄ rc.conf(5) ±äÁ¿¸ø command ָʾÆäÓÅÏȼ¶¡£ ËüµÄÃû×ÖÊÇÏÂÃæÕâÑùµÄÐÎʽ£º${name}_program£¬ name ÊÇÎÒÃÇ Ö®Ç° ÌÖÂÛ¹ýµÄ±ØÐëÐÔ±äÁ¿¡£È磬ÔÚÕâ¸ö°¸ÀýÖÐËüÓ¦¸ÃÃüÃûΪ emumbled_program¡£ÕâÆäʵÊÇ rc.subr(8) ·ÖÅä ${name}_program À´¸Äд command µÄ¡£

µ±È»£¬¼´Ê¹ command δ±»ÉèÖ㬠sh(1) Ò²½«ÔÊÐíÄã´Ó rc.conf(5) »ò×ÔÉíÀ´ÉèÖà ${name}_program¡£ÔÚÄÇÖÖÇé¿öÏ£¬ ${name}_program µÄÌØ¶¨ÊôÐÔ¶ªÊ§ÁË£¬ ²¢ÇÒËü³ÉΪÁËÒ»¸öÄܹ©ÄãµÄ½Å±¾ÓÃÓÚÆä×ÔÉíÄ¿µÄµÄÆÕͨ±äÁ¿¡£ È»¶ø£¬µ¥¶ÀʹÓà ${name}_program ÊDz¢²»ÊÇÎÒÃÇËù¼ÄÍûµÄ£¬ÒòΪͬʱʹÓÃËüºÍ command ÒѳÉΪÁË rc.d ½Å±¾±à³ÌµÄÒ»¸ö¹ßÓõÄÔ¼¶¨¡£

¹ØÓÚĬÈÏ·½·¨µÄ¸üÏêϸµÄÐÅÏ¢£¬Çë²Î¿¼ rc.subr(8)¡£


6 Æô¶¯²¢Í£Ö¹¸ß¼¶ÊØ»¤½ø³Ì

¡¡¡¡ÎÒÃÇÀ´¸øÖ®Ç°µÄ ¡°¹Ç¼Ü¡± ½Å±¾¼Óµã ¡°ÑªÈ⡱£¬²¢ÈÃËü¸ü¸´ÔÓ¸ü¸»ÓÐÌØÐÔ°É¡£ ĬÈϵķ½·¨ÒÑÄܹ»ÎªÎÒÃÇ×öºÜºÃµÄ¹¤×÷ÁË£¬ µ«ÊÇÎÒÃÇ¿ÉÄÜ»áÐèÒªËüÃÇһЩ·½ÃæµÄµ÷Õû¡£ ÏÖÔÚÎÒÃǽ«Ñ§Ï°ÈçºÎµ÷ÕûĬÈÏ·½·¨À´·ûºÏÎÒÃǵÄÐèÒª¡£

#!/bin/sh

. /etc/rc.subr

name="mumbled"
rcvar=`set_rcvar`

command="/usr/sbin/${name}"
command_args="mock arguments > /dev/null 2>&1"(1)

pidfile="/var/run/${name}.pid"(2)

required_files="/etc/${name}.conf /usr/share/misc/${name}.rules"(3)

sig_reload="USR1"(4)

start_precmd="${name}_prestart"(5)
stop_postcmd="echo Bye-bye"(6)

extra_commands="reload plugh xyzzy"(7)

plugh_cmd="mumbled_plugh"(8)
xyzzy_cmd="echo 'Nothing happens.'"

mumbled_prestart()
{
        if checkyesno mumbled_smart; then(9)
                rc_flags="-o smart ${rc_flags}"(10)
        fi
        case "$mumbled_mode" in
        foo)
                rc_flags="-frotz ${rc_flags}"
                ;;
        bar)
                rc_flags="-baz ${rc_flags}"
                ;;
        *)
                warn "Invalid value for mumbled_mode"(11)
                return 1(12)
                ;;
        esac
        run_rc_command xyzzy(13)
        return 0
}

mumbled_plugh()(14)
{
        echo 'A hollow voice says "plugh".'
}

load_rc_config $name
run_rc_command "$1"
(1)
¸½¼Ó¸ø $command µÄ²ÎÊýÔÚ command_args ÖнøÐд«µÝ¡£ËüÃÇÔÚ $mumbled_flags Ö®ºó½«±»Ìí¼Óµ½ÃüÁîÐС£ Æäʵ¼ÊµÄÖ´ÐбãÊǴ˺ó×îÖÕµÄÃüÁîÐд«µÝ¸ø eval ÔËË㣬ÊäÈëºÍÊä³öÒÔ¼°Öض¨Ïò¶¼¿ÉÒÔÔÚ command_args ÖÐÖ¸¶¨¡£

×¢Òâ: ÓÀÔ¶²»Òª ÔÚ command_args °üº¬ÆÆÕÛºÅÑ¡Ï ÀàËÆ -X »ò --foo ÕâÑùµÄ¡£command_args µÄÄÚÈݽ«³öÏÖÔÚ×îÖÕÃüÁîÐеÄĩ⣬Òò´ËËüÃÇ¿ÉÄÜÊǽô½ÓÔÚ ${name}_flags ÖÐËùÁгöµÄ²ÎÊýºóÃæ£» µ«´ó¶àµÄÃüÁ²»ÄÜʶ±ð³öÆÕͨ²ÎÊýºóµÄÆÆÕÛºÅÑ¡Ïî¡£ ¸üºÃµÄ´«µÝ¸½¼Ó¸ø $command µÄÑ¡ÏîµÄ·½Ê½ÊÇÌí¼ÓËüÃǵ½ ${name}_flags µÄÆðʼ´¦¡£ÁíÒ»ÖÖ·½·¨ÊÇÏñºóÎÄËùʾµÄÄÇÑùÀ´ÐÞ¸Ä rc_flags¡£

(2)
Ò»¸öµÃÌåµÄÊØ»¤½ø³Ì»á´´½¨Ò»¸ö pidfile ½ø³ÌÎļþ£¬ ÒÔʹÆä½ø³ÌÄܹ»¸üÈÝÒ׸ü¿É¿¿µØ±»ÕÒµ½¡£Èç¹ûÉèÖÃÁË pidfile ±äÁ¿£¬¸æËß rc.subr(8) ÄÄÀïÄÜÕÒµ½¹©ÆäĬÈÏ·½·¨ËùʹÓÃµÄ pidfile ½ø³ÌÎļþ¡£

×¢Òâ: ÊÂʵÉÏ£¬rc.subr(8) ÔÚÆô¶¯Ò»¸öÊØ»¤½ø³Ìǰ»¹»áʹÓà pidfile ½ø³ÌÎļþÀ´²é¿´ËüÊÇ·ñÒѾ­ÔÚÔËÐС£Ê¹ÓÃÁË faststart ²ÎÊý¿ÉÒÔÌø¹ýÕâ¸ö¼ì²é²½Öè¡£

(3)
Èç¹ûÊØ»¤½ø³ÌÖ»ÓÐÔÚÈ·¶¨µÄÎļþ´æÔÚµÄÇé¿öϲſÉÒÔÔËÐУ¬ ÄǾͽ«ËüÃÇÁе½ required_files ÖУ¬¶ø rc.subr(8) ½«ÔÚÆô¶¯ÊØ»¤½ø³Ì֮ǰ¼ì²éÄÇЩÎļþÊÇ·ñ´æÔÚ¡£ »¹ÓÐÏà¹ØµÄ·Ö±ðÓÃÀ´¼ì²éĿ¼ºÍ»·¾³±äÁ¿µÄ required_dirs ºÍ required_vars ¿É¹©Ê¹Óá£ËüÃǶ¼ÔÚ rc.subr(8) ÖÐÓÐÏêϸµÄ˵Ã÷¡£

×¢Òâ: À´×Ô rc.subr(8) µÄĬÈÏ·½·¨£¬Í¨¹ýʹÓà forcestart ×÷Ϊ½Å±¾µÄ²ÎÊý£¬ ¿ÉÒÔÇ¿ÖÆÐÔµØÌø¹ýÔ¤ÏÈÐèÒªµÄ¼ì²é¡£

(4)
ÎÒÃÇ¿ÉÒÔÔÚÊØ»¤½ø³ÌÓÐÒì³£µÄʱºò£¬×Ô¶¨Òå·¢Ë͸øÊØ»¤½ø³ÌµÄÐźš£ ÌØ±ðÊÇ£¬sig_reload Ö¸¶¨ÁËÊ¹ÊØ»¤½ø³ÌÖØÐÂ×°ÔØÆäÅäÖõÄÐźţ»Ä¬ÈÏÇé¿öÒ²¾ÍÊÇ SIGHUP Ðźš£ ÁíÒ»¸öÐźÅÊÇ·¢Ë͸øÊØ»¤½ø³ÌÒÔÍ£Ö¹¸Ã½ø³Ì£»Ä¬ÈÏÇé¿öÏÂÊÇ SIGTERM Ðźţ¬µ«ÕâÊÇ¿ÉÒÔͨ¹ýÉèÖà sig_stop À´½øÐÐÊʵ±¸ü¸ÄµÄ¡£

×¢Òâ: ÐźÅÃû³ÆÓ¦µ±ÒÔ²»°üº¬ SIG ǰ׺µÄÐÎʽָ¶¨¸ø rc.subr(8)£¬¾ÍÈç·¶ÀýÖÐËùʾµÄÄÇÑù¡£ FreeBSD °æ±¾µÄ kill(1) ³ÌÐòÄܹ»Ê¶±ð³ö SIG ǰ׺£¬²»¹ýÆäËüϵͳ°æ±¾µÄ¾Í²»Ò»¶¨ÁË¡£

(5)(6)
ÔÚĬÈϵķ½·¨Ç°Ãæ»òºóÃæÖ´Ðи½¼ÓÈÎÎñÊǺÜÈÝÒ׵ġ£ ¶ÔÓÚÎÒÃǽű¾ËùÖ§³ÖµÄÿÌõÃüÁî²ÎÊý¶øÑÔ£¬ÎÒÃÇ¿ÉÒÔ¶¨Òå argument_precmd ºÍ argument_postcmd À´Íê³É¡£ÕâЩ sh(1) ÃüÁî·Ö±ðÔÚËüÃǸ÷×Եķ½·¨Ç°ºó±»µ÷Ó㬠ÏÔÈ»£¬´ÓËüÃǸ÷×ÔµÄÃû×Ö¾ÍÄÜ¿´³öÀ´¡£

×¢Òâ: Èç¹ûÎÒÃÇÐèÒªµÄ»°£¬ÓÃ×Ô¶¨ÒåµÄ argument_cmd ¸ÄдĬÈϵķ½·¨£¬²¢²»·Á°­ÎÒÃÇÈÔȻʹÓà argument_precmd ºÍ argument_postcmd¡£ ÌØ±ðÊÇ£¬Ç°Õß±ãÓÚ¼ì²é×Ô¶¨ÒåµÄ·½·¨£¬ ÒÔ¼°Ö´ÐÐ×ÔÉíÃüÁî֮ǰËùÓöµ½¸üÑÏÃܵÄÌõ¼þ¡£ÓÚÊÇ£¬½« argument_precmd ºÍ argument_cmd Ò»ÆðʹÓã¬Ê¹ÎÒÃǺÏÀíµØ½«¼ì²é´Ó¶¯×÷ÖжÀÁ¢Á˳öÀ´¡£

±ðÍüÁËÄã¿ÉÒÔ½«ÈÎÒâµÄÓÐЧµÄ sh(1) ±í´ïʽ²åÈëµ½·½·¨ºÍÄ㶨ÒåµÄ pre- Óë post-commands ÃüÁîÖС£ Ôڴ󲿷ÖÇé¿öÏ£¬µ÷Óú¯Êýʹʵ¼ÊÈÎÎñÓкõķç¸ñ£¬ µ«Ç§Íò²»ÒªÈ÷ç¸ñÏÞÖÆÁËÄã¶ÔÆäÄ»ºóµ½µ×ÊÇÔõô»ØÊµÄ˼¿¼¡£

(7)
Èç¹ûÎÒÃÇÔ¸ÒâʵÏÖһЩ×Ô¶¨Òå²ÎÊý£¬ ÕâЩ²ÎÊýÒ²¿É±»ÈÏ×÷ΪÎÒÃǽű¾µÄ ÃüÁÎÒÃÇÐèÒªÔÚ extra_commands Öн«ËüÃÇÁгö²¢Ìṩ·½·¨ÒÔ´¦ÀíËüÃÇ¡£

×¢Òâ: reload ÊǸöÌØ±ðµÄÃüÁî¡£Ò»·½Ã棬 ËüÓÐÒ»¸öÔÚ rc.subr(8) ÖÐÔ¤Öõķ½·¨¡£ÁíÒ»·½Ã棬 reload ÃüÁîĬÈÏÊDz»±»ÌṩµÄ¡£ ÀíÓÉÊDz¢·ÇËùÓеÄÊØ»¤½ø³Ì¶¼Ê¹ÓÃͬÑùµÄÖØÔØ·½·¨£¬ ²¢ÇÒÓÐÐ©ÊØ»¤½ø³Ì¸ù±¾Ã»ÓÐÈκζ«Î÷¿ÉÖØÔØµÄ¡£ËùÒÔÏÔ¶øÒ×¼û£¬ ÎÒÃÇÐèҪȥѯÎʶ¼ÌṩÁËÄÄЩµÄÄÚ½¨¹¦ÄÜ¡£ÎÒÃÇ¿ÉÒÔͨ¹ý extra_commands À´ÕâÑù×ö¡£

ÎÒÃÇ´Ó reload µÄĬÈÏ·½·¨µÃµ½ÁËÊ²Ã´ÄØ£¿ ÊØ»¤½ø³Ì³£³£ÔÚÊÕµ½Ò»¸öÐźźóÖØÐÂÔØÈëËüÃǵÄÅäÖà ©¤©¤ Ò»°ãÀ´Ëµ£¬Ò²¾ÍÊÇ SIGHUP Ðźš£Òò´Ë rc.subr(8) ³¢ÊÔ·¢ËÍÒ»¸öÐźŸøÊØ»¤½ø³ÌÀ´ÖØÔØËü¡£ ¸ÃÐźÅÒ»°ãÔ¤ÉèΪ SIGHUP£¬ µ«ÊÇÈç¹û±ØÒªµÄ»°¿ÉÒÔͨ¹ý sig_reload ±äÁ¿À´×Ô¶¨ÒåËü¡£

(8)(14)
ÎÒÃǵĽű¾ÌṩÁËÁ½¸ö·Ç±ê×¼µÄÃüÁ plugh ºÍ xyzzy¡£ ÎÒÃÇ¿´µ½ËüÃÇÔÚ extra_commands Öб»ÁгöÀ´ÁË£¬ ²¢ÇÒÏÖÔÚÊÇʱºò¸øËüÃÇÌṩ·½·¨ÁË¡£xyzzy µÄ·½·¨ÊÇÄÚÁªµÄ¶ø plugh µÄÊÇÒÔ mumbled_plugh ÐÎʽÍê³ÉµÄº¯Êý¡£

·Ç±ê×¼ÃüÁîÔÚÆô¶¯»òÍ£Ö¹µÄʱºò²»±»µ÷Óᣠͨ³£ËüÃÇÊÇΪÁËϵͳ¹ÜÀíÔ±µÄ·½±ã¡£ËüÃÇ»¹Äܱ»ÆäËüµÄ×ÓϵͳËùʹÓ㬠ÀýÈ磬devd(8)£¬Ç°ÌáÊÇ devd.conf(5) ÖÐÒѾ­Ö¸¶¨ÁË¡£

È«²¿¿ÉÓÃÃüÁîµÄÁÐ±í£¬µ±½Å±¾²»¼Ó²ÎÊýµØµ÷ÓÃʱ£¬ÔÚ rc.subr(8) ´òÓ¡³öµÄʹÓ÷½·¨ÖÐÄܹ»ÕÒµ½¡£ÀýÈ磬 Õâ¾ÍÊǹ©Ñ§Ï°µÄ½Å±¾Ó÷¨µÄÄÚÈÝ£º

# /etc/rc.d/mumbled
Usage: /etc/rc.d/mumbled [fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll)
(13)
Èç¹û½Å±¾ÐèÒªµÄ»°£¬Ëü¿ÉÒÔµ÷ÓÃ×Ô¼ºµÄ±ê×¼»ò·Ç±ê×¼µÄÃüÁî¡£ Õâ¿ÉÄÜ¿´ÆðÀ´ÓеãÏñº¯ÊýµÄµ÷Ó㬵«ÎÒÃÇÖªµÀ£¬ÃüÁîºÍ shell º¯Êý²¢·ÇÒ»Ö±¶¼ÊÇͬÑùµÄ¶«Î÷¡£¾Ù¸öÀý×Ó£¬xyzzy ÔÚÕâÀï²»ÊÇÒÔº¯ÊýÀ´ÊµÏֵġ£ÁíÍ⣬»¹ÓÐÓ¦¸Ã±»ÓÐÐòµ÷ÓÃµÄ pre-command Ô¤ÖÃÃüÁîºÍ post-command ºóÖÃÃüÁî¡£ ËùÒԽű¾ÔËÐÐ×Ô¼ºÃüÁîµÄºÏÊÊ·½Ê½¾ÍÊÇÀûÓà rc.subr(8)£¬ ¾ÍÏñ·¶ÀýÖÐչʾµÄÄÇÑù¡£
(9)
rc.subr(8) ÌṩÁËÒ»¸ö·½±ãµÄº¯Êý½Ð×ö checkyesno¡£ ËüÒÔÒ»¸ö±äÁ¿Ãû×÷Ϊ²ÎÊý²¢·µ»ØÒ»¸öΪÁãµÄÍ˳öÖµ£¬ µ±ÇÒ½öµ±¸Ã±äÁ¿ÉèÖÃΪ YES£¬»ò TRUE£¬»ò ON£¬»ò 1£¬Çø·Ö´óСд£»·ñÔò·µ»ØÒ»¸ö·ÇÁãµÄÍ˳öÖµ¡£ ÔÚµÚ¶þÖÖÇé¿öÖУ¬º¯Êý²âÊÔ±äÁ¿µÄÉèÖÃΪ NO£¬ FALSE£¬OFF£¬»ò 0£¬Çø·Ö´óСд£» Èç¹û±äÁ¿°üº¬±ðµÄÄÚÈݵϰËü´òÓ¡Ò»Ìõ¾¯¸æÐÅÏ¢£¬ÀýÈ磬À¬»ø¡£

ÇÐ¼Ç¶Ô sh(1) ¶øÑÔÁãÖµÒâζ×ÅÕæ¶ø·ÇÁãÖµÒâζ׿١£

ÖØÒª: checkyesno º¯ÊýʹÓÃÒ»¸ö ±äÁ¿Ãû¡£²»ÒªÀ©´óº¬Ò彫±äÁ¿µÄ Öµ ´«µÝ¸øËü£» ·ñÔòËü²»»áÈçÄãÔ¤ÆÚÄÇÑùµÄ¹¤×÷¡£

ÏÂÃæÊÇ checkyesno µÄºÏÀíʹÓ÷¶Î§£º

if checkyesno mumbled_enable; then
        foo
fi

Ïà·´µØ£¬ÒÔÏÂÃæµÄ·½Ê½µ÷Óà checkyesno ÊDz»»á¹¤×÷µÄ -- ÖÁÉÙÊDz»»áÈçÄãÔ¤ÆÚµÄÄÇÑù£º

if checkyesno "${mumbled_enable}"; then
        foo
fi
(10)
ÎÒÃÇ¿ÉÒÔͨ¹ýÐÞ¸Ä $start_precmd ÖÐµÄ rc_flags À´Ó°Ïì´«µÝµ½ $command µÄ±êÖÄ¡£
(11)
ijÖÖÇé¿öÏÂÎÒÃÇ¿ÉÄÜÐèÒª·¢³öÒ»ÌõÖØÒªµÄÐÅÏ¢£¬ÄÇÑùµÄ»° syslog ¿ÉÒԺܺõؼǼÈÕÖ¾¡£ Õâ¿ÉÒÔʹÓÃÏÂÁÐ rc.subr(8) º¯ÊýÀ´ÇáËÉÍê³É£º debug£¬info£¬ warn£¬ÒÔ¼° err¡£ ºóÕßÒÔÖ¸¶¨µÄ´úÂëÖµÍ˳ö½Å±¾¡£
(12)
·½·¨µÄÍ˳öÖµºÍËüÃÇµÄ pre-commands Ô¤ÃüÁî²»Ö»ÊÇĬÈϱ»ºöÂÔµô¡£Èç¹û argument_precmd ·µ»ØÁËÒ»¸ö·ÇÁãÍ˳öÖµ£¬Ö÷·½·¨½«²»»á±»Ö´ÐС£ÒÀ´ÎµØÊÇ£¬ argument_postcmd ½«²»»á±»µ÷Ó㬳ý·ÇÖ÷·½·¨·µ»ØµÄÊÇÒ»¸öΪÁãµÄÍ˳öÖµ¡£

×¢Òâ: È»¶ø£¬µ±¸øÒ»¸ö²ÎÊýʹÓà force ǰ׺µÄʱºò£¬Èç forcestart£¬rc.subr(8) »áÌý´ÓÃüÁîÐÐָʾ¶øºöÂÔÄÇЩÍ˳öÖµ×îºóÈÔÈ»µ÷ÓÃËùÓеÄÃüÁî¡£


7 Á´½Ó½Å±¾µ½ rc.d ¿ò¼Ü

¡¡¡¡µ±±àдºÃÁËÒ»¸ö½Å±¾£¬ËüÐèÒª±»ÕûºÏµ½ rc.d ÖÐÈ¥¡£ Ò»¸öÖØÒªµÄ²½Öè¾ÍÊǰ²×°½Å±¾µ½ /etc/rc.d £¨¶Ô»ù±¾ÏµÍ³¶øÑÔ£©»ò /usr/local/etc/rc.d £¨¶Ôports¶øÑÔ£©ÖÐÈ¥¡£ÔÚ <bsd.prog.mk> ºÍ <bsd.port.mk> Öж¼Îª´ËÌṩÁË·½±ãµÄ½Ó¿Ú£¬ ͨ³£Äã²»±Øµ£ÐÄÊʵ±µÄËùÓÐȨÏÞºÍģʽ¡£ÏµÍ³½Å±¾Ó¦µ±ÊÇͨ¹ý¿ÉÒÔÔÚ src/etc/rc.d ÕÒµ½µÄ Makefile °²×°µÄ¡£Port ½Å±¾¿ÉÒÔÏñ Porter's Handbook ÖÐÃèÊöÄÇÑùͨ¹ýʹÓà USE_RC_SUBR À´±»°²×°¡£

¡¡¡¡²»¹ý£¬ÎÒÃÇÓ¦¸ÃÔ¤ÏÈ¿¼Âǵ½ÎÒÃǽű¾ÔÚϵͳÆô¶¯Ë³ÐòÖеÄλÖᣠÎÒÃǵĽű¾Ëù´¦ÀíµÄ·þÎñ¿ÉÄÜÒÀÀµÓÚÆäËüµÄ·þÎñ¡£¾Ù¸öÀý×Ó£¬ ûÓÐÍøÂç½Ó¿ÚºÍ·ÓÉÑ¡ÔñµÄÆôÓÃÔËÐеϰ£¬Ò»¸öÍøÂçÊØ»¤½ø³ÌÊDz»Æð×÷Óõġ£ ¼´Ê¹Ò»¸ö·þÎñ¿´ËÆÊ²Ã´¶¼²»ÐèÒª£¬ÔÚ»ù±¾Îļþϵͳ¼ì²é¹ÒÔØÍê±Ï֮ǰҲºÜÄÑÆô¶¯¡£

¡¡¡¡Ö®Ç°ÎÒÃÇÔøÌáµ½¹ý rcorder(8)¡£ÏÖÔÚÊÇʱºòÀ´ÃÜÇеعØ×¢ÏÂËüÁË¡£ ÁýͳµØËµ£¬rcorder(8) ´¦ÀíÒ»×éÎļþ£¬¼ìÑéËüÃǵÄÄÚÈÝ£¬ ²¢´ÓÎļþ¼¯ºÏ´òÓ¡Ò»¸öÎļþÁбíµÄÒÀÀµË³Ðòµ½ stdout ±ê×¼Êä³ö¡£ÕâµãÊÇÓÃÓÚ±£³ÖÎļþÄÚ²¿µÄÒÀÀµÐÅÏ¢£¬ ¶øÃ¿¸öÎļþÖ»ÄÜ˵Ã÷×Ô¼ºµÄÒÀÀµ¡£Ò»¸öÎļþ¿ÉÒÔÖ¸¶¨ÈçÏÂÐÅÏ¢£º

¡¡¡¡²¢²»Ææ¹ÖµÄÊÇ£¬rcorder(8) Ö»ÄÜ´¦Àí½Ó½ü sh(1) Óï·¨µÄÎı¾Îļþ¡£rcorder(8) Ëù½â¶ÁµÄÌØÊâÐп´ÆðÀ´ÀàËÆ sh(1) µÄ×¢ÊÍ¡£ÕâÖÖÌØÊâÎı¾ÐеÄÓï·¨Ï൱ÑϸñµØ¼ò»¯ÁËÆä´¦Àí¡£ Çë²éÔÄ rcorder(8) ÒÔ»ñÈ¡¸üÏêϸµÄÐÅÏ¢¡£

¡¡¡¡³ýʹÓà rcorder(8) µÄÌØÊâÐÐÒÔÍ⣬ ½Å±¾¿ÉÒÔ¼á³Ö½«ÆäÒÀÀµµÄÆäËü·þÎñÇ¿ÖÆÐÔÆô¶¯¡£µ±ÆäËü·þÎñÊÇ¿ÉÑ¡µÄ£¬ ²¢Òòϵͳ¹ÜÀíÔ±´íÎóµØÔÚ rc.conf(5) ÖнûÓõô¸Ã·þÎñ¶øÊ¹Æä²»ÄÜ×ÔÐÐÆô¶¯Ê±£¬»áÐèÒªÕâÒ»µã¡£

¡¡¡¡½«ÕâЩ½÷¼ÇÔÚÐÄ£¬ÎÒÃÇÀ´¿¼ÂÇϼòµ¥½áºÏÁËÒÀÀµÐÅÏ¢ÔöÇ¿µÄÊØ»¤½ø³Ì½Å±¾£º

#!/bin/sh

# PROVIDE: mumbled oldmumble (1)
# REQUIRE: DAEMON cleanvar frotz(2)
# BEFORE:  LOGIN(3)
# KEYWORD: nojail shutdown(4)

. /etc/rc.subr

name="mumbled"
rcvar=`set_rcvar`
command="/usr/sbin/${name}"
start_precmd="${name}_prestart"

mumbled_prestart()
{
        if ! checkyesno frotz_enable && \
            ! /etc/rc.d/frotz forcestatus 1>/dev/null 2>&1; then
                force_depend frotz || return 1(5)
        fi
        return 0
}

load_rc_config $name
run_rc_command "$1"

¡¡¡¡¸úÇ°ÃæÒ»Ñù£¬×öÈçÏÂÏêϸ·ÖÎö£º

(1)
¸ÃÐÐÉùÃ÷ÁËÎÒÃǽű¾ËùÌṩµÄ ¡°Ìõ¼þ¡± µÄÃû×Ö¡£ ÏÖÔÚÆäËü½Å±¾¿ÉÒÔÓÃÄÇЩÃû×ÖÀ´±êÃ÷ÎÒÃǽű¾µÄÒÀÀµ¡£

×¢Òâ: ͨ³£½Å±¾Ö¸¶¨Ò»¸öµ¥¶ÀµÄÒÑÌṩµÄÌõ¼þ¡£È»¶ø£¬ ²¢Ã»ÓÐʲô·Á°­ÎÒÃÇ´ÓÁгöµÄÄÇЩÌõ¼þÖÐÖ¸¶¨£¬ÀýÈ磬 ΪÁ˼æÈÝÐÔµÄÄ¿µÄ¡£

ÔÚÆäËüÇé¿ö£¬Ö÷ÒªµÄÃû³Æ£¬»òÕß˵ΨһµÄ£¬ PROVIDE: Ìõ¼þÓ¦¸ÃÓë ${name} Ïàͬ¡£

(2)(3)
Òò´ËÎÒÃǵĽű¾Ö¸Ê¾ÁËÆäÒÀÀµÓÚ±ðµÄ½Å±¾ËùÌṩµÄ ¡°Ìõ¼þ¡±¡£¸ù¾ÝÕâЩÐеÄÐÅÏ¢£¬½Å±¾Çëʾ rcorder(8) ÒÔ½«Æä·ÅÔÚÒ»¸ö»ò¶à¸öÌṩ DAEMON ºÍ cleanvar µÄ½Å±¾ºóÃæ£¬µ«ÔÚÌṩ LOGIN µÄ½Å±¾Ç°Ãæ¡£

×¢Òâ: BEFORE: ÕâÒ»Ðв»¿ÉÒÔÔÚÆäËü½Å±¾²»ÍêÕûµÄÒÀÀµ¹ØÏµÁбíÖÐÀÄÓᣠÊʺÏʹÓà BEFORE: µÄÇé¿öÊǵ±ÆäËü½Å±¾²»¹ØÐÄÎÒÃǵĽű¾£¬ µ«ÊÇÎÒÃǵĽű¾Èç¹ûÔÚÁíÒ»¸ö֮ǰÔËÐеϰÄܹ»¸üºÃµØÖ´ÐÐÈÎÎñ¡£ Ò»¸öµäÐ͵ÄʵÀýÊÇÍøÂç½Ó¿ÚºÍ·À»ðǽ£º ËäÈ»½Ó¿Ú²»ÒÀÀµ·À»ðǽÀ´Íê³É×Ô¼ºµÄ¹¤×÷£¬ µ«ÊÇϵͳ°²È«½«ÒòÒ»ÇÐÍøÂçÁ÷Á¿Ö®Ç°Æô¶¯µÄ·À»ðǽ¶øÊÜÒæ¡£

³ýÁËÌõ¼þÏà¶ÔÓ¦µÄÿ¸öµ¥¶À·þÎñ£¬½Å±¾Ê¹ÓÃÔªÌõ¼þºÍËüÃÇµÄ ¡°Õ¼Î»·û¡± À´±£Ö¤Ä³¸ö²Ù×÷×éÔÚÆäËü֮ǰ±»Ö´ÐС£ ÕâЩÊÇÓÉ UPPERCASE ´óдÃû×ÖËù±íʾµÄ¡£ËüÃǵÄÁбíºÍÓ÷¨¿ÉÒÔÔÚ rc(8) ÖÐÕÒµ½¡£

Çмǽ«Ò»¸ö·þÎñÃû³Æ·Å½ø REQUIRE: Ðв»Äܱ£Ö¤Êµ¼ÊµÄ·þÎñ»áÔÚÎÒÃǵĽű¾Æô¶¯µÄʱºòÔËÐС£ ËùÐèÇóµÄ·þÎñ¿ÉÄÜ»áÆô¶¯Ê§°Ü»òÔÚ rc.conf(5) Öб»½ûµôÁË¡£ ÏÔÈ»£¬rcorder(8) ÊÇÎÞ·¨×·×ÙÕâЩϸ½ÚµÄ£¬²¢ÇÒ rc(8) Ò²²»»áÈ¥×·×Ù¡£ËùÒÔ£¬ ½Å±¾Æô¶¯µÄÓ¦ÓóÌÐòÓ¦µ±Äܹ»Ó¦¸¶ÈκÎËùÐèÇóµÄ·þÎñµÄ²»¿ÉÓÃÇé¿ö¡£ ijЩÇé¿öÏ£¬ÎÒÃÇ¿ÉÒÔÓà ÏÂÃæ ËùÌÖÂ۵ķ½Ê½À´Ð­Öú½Å±¾¡£

(4)
ÈçÎÒÃÇ´ÓÉÏÊöÎÄ×ÖËù¼ÇÆðµÄ£¬rcorder(8) ¹Ø¼ü×Ö¿ÉÒÔÓÃÀ´Ñ¡Ôñ»òÊ¡ÂÔijЩ½Å±¾¡£¼´ÈκΠrcorder(8) Óû§¿ÉÒÔͨ¹ýÖ¸¶¨ -k ºÍ -s Ñ¡ÏîÀ´·Ö±ðÖ¸¶¨ ¡°±£ÁôÇåµ¥£¨keep list£©¡± ºÍ ¡°Ìø¹ýÇåµ¥£¨skip list£©¡±¡£ ´ÓÈ«²¿Îļþµ½°´ÒÀÀµ¹ØÏµÅÅÁеÄÇåµ¥£¬rcorder(8) ½«Ö»ÊÇÌô³ö±£ÁôÇåµ¥£¨³ý·ÇÊǿյģ© ÖÐÄÇЩ´ø¹Ø¼ü×ÖµÄÒÔ¼°´ÓÌø¹ýÇåµ¥ÖÐÌô³ö²»´ø¹Ø¼ü×ÖµÄÎļþ¡£

ÔÚ FreeBSD ÖУ¬rcorder(8) ±» /etc/rc ºÍ /etc/rc.shutdown ËùʹÓᣠÕâÁ½¸ö½Å±¾¶¨ÒåÁË FreeBSD ÖÐ rc.d ¹Ø¼ü×ÖÒÔ¼°ËüÃǵÄÒâÒåµÄ±ê×¼ÁбíÈçÏ£º

nojail

¸Ã·þÎñ²»ÊÊÓÃÓÚ jail(8) »·¾³¡£ Èç¹ûÊÇÔÚ jail µÄÄÚ²¿µÄ»°£¬×Ô¶¯Æô¶¯ºÍ¹Ø±Õ³ÌÐò½«ºöÂԸýű¾¡£

nostart

¸Ã·þÎñÖ»ÄÜÊÖ¶¯Æô¶¯·ñÔò½«²»»áÆô¶¯¡£ ×Ô¶¯Æô¶¯³ÌÐò½«ºöÂԴ˽ű¾¡£½áºÏ shutdown ¹Ø¼ü×ֵϰ£¬Õâ¿ÉÒÔÓÃÀ´±àдֻÔÚϵͳ¹Ø±ÕʱִÐÐһЩÈÎÎñµÄ½Å±¾¡£

shutdown

Õâ¸ö¹Ø¼ü×Ö Ã÷È· µØÁгöÁËÐèÒªÔÚϵͳ¹Ø±ÕǰֹͣµÄ·þÎñ¡£

×¢Òâ: µ±ÏµÍ³¼´½«¹Ø±ÕµÄʱºò£¬ /etc/rc.shutdown ÔÚÔËÐС£ Ëü¼Ù¶¨ÈÏΪ´ó²¿·ÖµÄ rc.d ½Å±¾ÔÚÄÇ¿Ìʲô¶¼²»×ö¡£Òò´Ë£¬ /etc/rc.shutdown Ñ¡ÔñÐԵص÷ÓôøÓÐ shutdown ¹Ø¼ü×ÖµÄ rc.d ½Å±¾£¬ ÓÐЧµØºöÂÔÆäÓàµÄ½Å±¾¡£ÎªÁ˸ü¿ìµÄ¹Ø±Õ£¬ /etc/rc.shutdown ´«µÝ faststop ÃüÁî¸øÆäÔËÐеĽű¾£¬ ÒÔÌø¹ýÔ¤Öõļì²é£¬ÀýÈ磬½ø³ÌÎļþ pidfile µÄ¼ì²é¡£ ÕýÈçÒÀÀµÐÔ·þÎñÓ¦¸ÃÔÚÆäËùÒÀÀµµÄ·þÎñ֮ǰֹͣ£¬ /etc/rc.shutdown ÒÔÏà·´µÄÒÀÀµ´ÎÐòÀ´ÔËÐÐÕâЩ½Å±¾¡£

Èç¹ûдһ¸öÕæÕýµÄ rc.d ½Å±¾µÄ»°£¬ ÄãÓ¦µ±¿¼Âǵ½ÆäÊÇ·ñÓëϵͳ¹Ø±ÕʱÓйØÏµ¡£ÀýÈ磬 Èç¹ûÄãµÄ½Å±¾Ö»Í¨¹ýÏìÓ¦ start ÃüÁîÀ´ÔËÐÐÈÎÎñ£¬ÄÇôÄã²»ÐèÒª°üº¬Õâ¸ö¹Ø¼ü×Ö¡£È»¶ø£¬ Èç¹ûÄãµÄ½Å±¾¹ÜÀí×ÅÒ»¸ö·þÎñ£¬ÄÇô£¬ÔÚϵͳ½øÈë halt(8) ÖÐËùÃèÊöµÄÆä±¾Éí¹Ø±Õ˳ÐòµÄ×îÖÕ½×¶Î֮ǰֹͣ¸Ã½Å±¾£¬ ¿ÉÄÜÊǸö²»´íµÄÖ÷Òâ¡£ÌØ±ðÊÇ£¬ ÄãÏÔÈ»ÊÇÓ¦¸Ã¹Ø±ÕÒ»¸öÐèÒªÏ൱³¤Ê±¼ä£¬ »òÐèÒªÌØ¶¨µÄ¶¯×÷²ÅÄܸɾ»µØ¹Ø±ÕµÄ·þÎñ¡£ Êý¾Ý¿âÒýÇæ¾ÍÊÇÕâÑùÒ»¸öµäÐ͵ÄÀý×Ó¡£

(5)
ÒÔ force_depend ÆðʼµÄÐÐÓ¦±»ÓÃÓÚ¸ü½÷É÷µÄÇé¿ö¡£Í¨³££¬ÓÃÓÚÐÞÕýÏ໥¹ØÁªµÄ rc.d ½Å±¾·Ö²ã½á¹¹µÄÅäÖÃÎļþʱ»á¸ü¼ÓÎÈÍס£

Èç¹ûÄãÈÔ²»ÄÜÍê³É²»º¬ force_depend µÄ½Å±¾£¬ ·¶ÀýÌṩÁËÒ»¸öÈçºÎÓÐÌõ¼þµØµ÷ÓÃËüµÄϰ¹ßÓ÷¨¡£ÔÚ·¶ÀýÖУ¬ÎÒÃÇµÄ mumbled ÊØ»¤½ø³ÌÐèÇóÁíÒ»¸öÒԸ߼¶·½Ê½Æô¶¯µÄ½ø³Ì£¬ frotz¡£µ« frotz Ò²ÊÇ¿ÉÑ¡µÄ£» ¶øÇÒ rcorder(8) ¶ÔÕâЩÐÅÏ¢ÊÇÒ»ÎÞËùÖªµÄ¡£ÐÒÔ˵ÄÊÇ£¬ ÎÒÃǵĽű¾ÒÑ·ÃÎʵ½È«²¿µÄ rc.conf(5) ±äÁ¿¡£Èç¹û frotz_enable ÎªÕæ£¬ÎÒÃÇÏ£ÍûµÄ×îºÃ½á¹ûÊÇÒÀ¿¿ rc.d ÒѾ­Æô¶¯ÁË frotz¡£ ·ñÔòÎÒÃÇÇ¿ÖÆ¼ì²é frotz µÄ״̬¡£×îÖÕ£¬ Èç¹û frotz ÒÀÀµµÄ·þÎñûÓÐÕÒµ½»òÔËÐеϰ£¬ ÎÒÃǽ«Ç¿ÖÆÆäÔËÐС£Õâʱ force_depend ½«·¢³öÒ»Ìõ¾¯¸æÐÅÏ¢£¬ÒòΪËüÖ»Ó¦¸ÃÔÚ¼ì²éµ½ÅäÖÃÐÅÏ¢¶ªÊ§µÄÇé¿öϱ»µ÷Óá£


8 ¸øÓè rc.d ½Å±¾¸ü¶àµÄÁé»îÐÔ

¡¡¡¡µ±½øÐÐÆô¶¯»òÍ£Ö¹µÄµ÷ÓÃʱ£¬rc.d ½Å±¾Ó¦¸Ã×÷ÓÃÓÚÆäËù¸ºÔðµÄÕû¸ö×Óϵͳ¡£ÀýÈ磬 /etc/rc.d/netif Ó¦¸ÃÆô¶¯»òÍ£Ö¹ rc.conf(5) ÖÐËùÃèÊöµÄÈ«²¿ÍøÂç½Ó¿Ú¡£Ã¿¸öÈÎÎñ¶¼Î¨Ò»µØÌý´ÓÒ»¸öÈç start »ò stop ÕâÑùµÄµ¥¶ÀÃüÁî²ÎÊýµÄָʾ¡£ÔÚÆô¶¯ºÍÍ£Ö¹Ö®¼äµÄʱ¼ä£¬ rc.d ½Å±¾°ïÖú¹ÜÀíÔ±¿ØÖÆÔËÐÐÖеÄϵͳ£¬ ²¢ÆäÔÚÐèÒªµÄʱºòËü½«²úÉú¸ü¶àµÄÁé»îÐԺ;«È·ÐÔ¡£¾Ù¸öÀý×Ó£¬ ¹ÜÀíÔ±¿ÉÄÜÏëÔÚ rc.conf(5) ÖÐÌí¼ÓÒ»¸öÐÂÍøÂç½Ó¿ÚµÄÅäÖÃÐÅÏ¢£¬ È»ºóÔÚ²»·Á°­ÆäËüÒÑ´æÔÚ½Ó¿ÚµÄÇé¿öϽ«ÆäÆô¶¯¡£ ÔÚÏ´ιÜÀíÔ±¿ÉÄÜÐèÒª¹Ø±ÕÒ»¸öµ¥¶ÀµÄÍøÂç½Ó¿Ú¡£ÔÚħ»ÃµÄÃüÁîÐÐÖУ¬ ¶ÔÓ¦µÄ rc.d ½Å±¾µ÷ÓÃÒ»¸ö¶îÍâµÄ²ÎÊý£¬ ÍøÂç½Ó¿ÚÃû¼´¿É¡£

¡¡¡¡ÐÒÔ˵ÄÊÇ£¬rc.subr(8) ÔÊÐí´«µÝÈÎÒâ¶à£¨È¡¾öÓÚϵͳÏÞÖÆ£©µÄ²ÎÊý¸ø½Å±¾µÄ·½·¨¡£ ÓÉÓÚÕâ¸öÔ­Òò£¬½Å±¾×ÔÉíµÄ¸Ä±ä¿ÉÒÔ˵ÊÇ΢ºõÆä΢¡£

¡¡¡¡rc.subr(8) ÈçºÎ·ÃÎʵ½¸½¼ÓµÄÃüÁîÐвÎÊýÄØ£¿Ö±½Ó»ñȡô£¿ ²¢·ÇÊÇÎÞËù²»ÓÃÆä¼«µÄ¡£Ê×ÏÈ£¬sh(1) º¯ÊýûÓзÃÎʵ½µ÷ÓÃÕߵĶ¨Î»²ÎÊý£¬¶ø rc.subr(8) Ö»ÊÇÕâЩº¯ÊýµÄÈÝÆ÷¡£Æä´Î£¬rc.d Ö¸ÁîµÄÒ»¸öºÃµÄ·ç¸ñÊÇÓÉÖ÷º¯ÊýÀ´¾ö¶¨½«ÄÄЩ²ÎÊý´«µÝ¸øËüµÄ·½·¨¡£

¡¡¡¡ËùÒÔ rc.subr(8) ÌṩÁËÈçÏµķ½·¨£º run_rc_command ´«µÝÆäËùÓвÎÊýµ«½«µÚÒ»¸ö²ÎÊýÖð×Ö´«µÝµ½¸÷×Եķ½·¨¡£Ê×ÏÈ£¬ ·¢³öÒÔ·½·¨×ÔÉíΪÃû×ֵIJÎÊý£ºstart£¬ stop£¬µÈµÈ¡£Õâ»á±» run_rc_command ÒÆ³ö£¬ ÕâÑùÃüÁîÐÐÖÐÔ­±¾ $2 µÄÄÚÈݽ«×÷Ϊ $1 À´Ìṩ¸ø·½·¨£¬µÈµÈ¡£

¡¡¡¡ÎªÁË˵Ã÷Õâµã£¬ÎÒÃÇÀ´ÐÞ¸ÄÔ­À´µÄÐéÄâ½Å±¾£¬ ÕâÑùËüµÄÐÅÏ¢½«È¡¾öÓÚËùÌṩµÄ¸½¼Ó²ÎÊý¡£´ÓÕâÀï³ö·¢£º

#!/bin/sh

. /etc/rc.subr

name="dummy"
start_cmd="${name}_start"
stop_cmd=":"
kiss_cmd="${name}_kiss"
extra_commands="kiss"

dummy_start()
{
        if [ $# -gt 0 ]; then(1)
                echo "Greeting message: $*"
        else
                echo "Nothing started."
        fi
}

dummy_kiss()
{
        echo -n "A ghost gives you a kiss"
        if [ $# -gt 0 ]; then(2)
                echo -n " and whispers: $*"
        fi
        case "$*" in
        *[.!?])
                echo
                ;;
        *)
                echo .
                ;;
        esac
}

load_rc_config $name
run_rc_command "$@"(3)

¡¡¡¡ÄÜ×¢Òâµ½½Å±¾Àï·¢ÉúÁËÄÇЩʵÖÊÐԸıäô£¿

(1)
ÄãÊäÈëµÄËùÓÐÔÚ start Ö®ºóµÄ²ÎÊý¿ÉÒÔ±»µ±×÷¸÷×Ô·½·¨µÄ¶¨Î»²ÎÊýÒ»Ñù±»Öսᡣ ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÎÒÃǵÄÈÎÎñ¡¢¼¼ÇɺÍÏë·¨À´ÒÔÈκη½Ê½Ê¹ÓÃËûÃÇ¡£ ÔÚµ±Ç°µÄÀý×ÓÖУ¬ÎÒÃÇÖ»ÊÇÒÔÏÂÐÐÖÐ×Ö·û´®µÄÐÎʽ´«µÝ²ÎÊý¸ø echo(1) ³ÌÐò ©¤©¤ ×¢Òâ $* ÊÇÓÐË«ÒýºÅµÄ¡£ÕâÀïÊǽű¾ÈçºÎ±»µ÷Óõģº
# /etc/rc.d/dummy start
Nothing started.
# /etc/rc.d/dummy start Hello world!
Greeting message: Hello world!
(2)
ͬÑùÓÃÓÚÎÒÃǽű¾ÌṩµÄÈκη½·¨£¬²¢²»½öÏÞÓÚ±ê×¼µÄ·½·¨¡£ ÎÒÃÇÒѾ­Ìí¼ÓÁËÒ»¸ö×Ô¶¨ÒåµÄ½Ð×ö kiss µÄ·½·¨£¬ ²¢ÇÒËü¸ø¸½¼Ó²ÎÊý´øÀ´µÄÏ·Ë£¾ö²»ÑÇÓÚ start¡£ ÀýÈ磺
# /etc/rc.d/dummy kiss
A ghost gives you a kiss.
# /etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...
A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu...
(3)
Èç¹ûÎÒÃÇÖ»ÊÇ´«µÝËùÓи½¼Ó²ÎÊý¸øÈÎÒâµÄ·½·¨£¬ ÎÒÃÇÖ»ÐèÒªÔڽű¾µÄ×îºóÒ»ÐÐÎÒÃǵ÷Óà run_rc_command µÄµØ·½£¬ Óà "$@ ´úÌæ "$1" ¼´¿É¡£

ÖØÒª: Ò»¸ö sh(1) ³ÌÐòÔ±Ó¦¸ÃÊÇ¿ÉÒÔÀí½â $* ºÍ $@ µÄ΢ÃîÇø±ðÖ»ÊÇÖ¸¶¨È«²¿¶¨Î»²ÎÊýµÄ²»Í¬·½·¨¡£ ¹ØÓڴ˸üÉîÈëµÄ̽ÌÖ£¬¿ÉÒԲο¼Õâ¸öºÜºÃµÄ sh(1) ½Å±¾±à³ÌÊֲᡣÔÚÄãÍêÈ«Àí½âÕâЩ±í´ïʽµÄÒâÒå֮ǰÇ벻ҪʹÓÃËüÃÇ£¬ ÒòΪÎóÓÃËüÃǽ«¸ø½Å±¾ÒýÈëȱÏݺͲ»°²È«µÄ±×¶Ë¡£

×¢Òâ: ÏÖÔÚ run_rc_command ¿ÉÄÜÓиöȱÏÝ£¬ Ëü½«Ó°Ïì±£³Ö²ÎÊýÖ®¼äµÄÔ­±¾±ß½ç¡£Ò²¾ÍÊÇ£¬ ´øÓÐǶÈë¿Õ°×µÄ²ÎÊý¿ÉÄܲ»»á±»ÕýÈ·´¦Àí¡£¸ÃȱÏÝÊÇÓÉÓÚ¶Ô $* µÄÎóÓá£


9 ½øÒ»²½ÔĶÁ

¡¡¡¡ Luke Mewburn µÄԭʼÎÄÕ Öн²ÊöÁË rc.d µÄ»ù±¾¸ÅÒª£¬ ²¢Ïêϸ²ûÊöÁËÆäÉè¼Æ·½°¸µÄÔ­Àí¡£¸ÃÎÄÕÂÌṩÁËÉîÈëÁ˽âÕû¸ö rc.d ¿ò¼ÜÒÔ¼°ÆäËùÔÚµÄÏÖ´ú BSD ²Ù×÷ϵͳµÄÄÚÈÝ¡£

¡¡¡¡ÔÚ rc(8)£¬rc.subr(8)£¬ »¹ÓÐ rcorder(8) µÄÁª»úÊÖ²áÖУ¬¶Ô rc.d ×é¼þ×öÁ˷dz£ÏêϸµÄ¼ÇÔØ¡£ ÔÚÄãд½Å±¾Ê±£¬Èç¹û²»È¥Ñ§Ï°ºÍ²Î¿¼ÕâЩÁª»úÊÖ²áµÄ»°£¬ ÄãÊÇÎÞ·¨ÍêÈ«·¢»Ó³ö rc.d µÄÄÜÁ¿µÄ¡£

¡¡¡¡¹¤×÷ÖÐʵ¼Ê·¶ÀýµÄÖ÷ÒªÀ´Ô´¾ÍÊÇÔËÐеÄϵͳÖÐµÄ /etc/rc.d Ŀ¼¡£ ËüµÄÄÚÈݿɶÁÐԷdz£ºÃ£¬ÒòΪ´ó²¿·ÖµÄ¿ÝÔïµÄÄÚÈݶ¼Éî²ØÔÚ rc.subr(8) ÖÐÁË¡£ÇÐ¼Ç /etc/rc.d µÄ½Å±¾Ò²²»ÊÇÉñÏÉд³öÀ´µÄ£¬ ËùÒÔËüÃÇ¿ÉÄÜÒ²´æÔÚ×Å´úÂëȱÏÝÒÔ¼°µÍ¼¶µÄÉè¼Æ·½°¸¡£ µ«ÏÖÔÚÄã¿ÉÒÔÀ´¸Ä½øËüÃÇÁË£¡


±¾ÎĵµºÍÆäËüÎĵµ¿É´ÓÕâÀïÏÂÔØ£ºftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Èç¹û¶ÔÓÚFreeBSDÓÐÎÊÌ⣬ÇëÏÈÔĶÁÎĵµ£¬Èç²»Äܽâ¾öÔÙÁªÏµ<questions@FreeBSD.org>.
¹ØÓÚ±¾ÎĵµµÄÎÊÌâÇë·¢ÐÅÁªÏµ <doc@FreeBSD.org>.