Mac OSã«ããããinitã/etc/rcãcronã®ä»£ããã§ããlaunchdã®ä½¿ãæ¹
Mac OSã¯UNIXãã¼ã¹ã§ããããã¼ã¢ã³ã®èµ·åã管çã«ã¯RunCommandã使ããªããªã£ã¦ãã¾ãã
OS X 10.4ï¼Tigerï¼ãããUNIXã®PID 1ã®ããã»ã¹ã¯initã§ããããããã«ä»£ãã£ã¦ launchd ãå°å
¥ããã¾ããã
OS X 10.5ï¼Leopardï¼ã§ã¯ãä¸å¿æ®ã£ã¦ãã /etc/rc ãç¡ããªãã¾ããã
èµ·åæã«ãã¼ã¢ã³ãç«ã¡ä¸ãããããã¼ã¢ã³ã®ã³ã³ããã¼ã«ã« /etc/rc ã使ããªãã®ã§ãlaunchd ã®ä»çµã¿ã調ã¹ã¦ã¿ã¾ããã
æ¦è¦
ééããããããã¨ãããã誤解ãæããããããªããã©ããã£ããã¨ã
- launchd 㯠init ã®ä»£ããã«PID 1ã§æåã«èµ·åãã¦ãåæåãã·ã§ã«ã®èµ·åãè¡ãã
- /etc/rc ã¯ç¡ããªã£ããã©ä¸é¨æ®ã£ã¦ã /etc/rc.common ãªã©ã®rcã¹ã¯ãªãããå®è¡ããã
- /etc/rc ã®rcã¹ã¯ãªããã®ä»£ããã« launchd.plist ã使ãã
- cron ã®ä»£ããã«æå»ãããªã¬ã¼ã«ããããã»ã¹ã®èµ·åãããã
- inetd/xinetd ã®ä»£ããã«ãããã¯ã¼ã¯ã®ãã¼ããç£è¦ãã¦ãããã»ã¹ã®èµ·åãè¡ãã
- ãã¡ã¤ã«ããã©ã«ããç£è¦ãããã¡ã¤ã«ã®è¿½å ãæ´æ°ãããªã¬ã¼ã«ãã¦ãããã»ã¹ã®èµ·åãè¡ãã
ãã¼ã¢ã³ããµã¼ãã¹ã¨ãã¦ç»é²ãã
rcã¹ã¯ãªããã®ä»£ããã«XMLã§è¨è¿°ãã launchd.plist ãä½ãã¾ãã
$ ls -al /Library/LaunchDaemons/ total 40 drwxr-xr-x 7 root wheel 238 6 21 07:07 . drwxrwxr-t+ 57 root admin 1938 12 8 2009 .. -rw-r--r-- 1 root wheel 694 5 29 2009 de.jinx.SmartSleepDaemon.plist -rw-r--r-- 1 root wheel 412 6 21 03:13 kanonji.gnump3d.plist lrwxr-xr-x 1 root wheel 66 10 22 2009 org.freedesktop.dbus-system.plist -> /opt/local/Library/LaunchDaemons/org.freedesktop.dbus-system.plist -rw-r--r-- 1 root wheel 474 5 26 2008 org.pqrs.KeyRemap4MacBook.load.plist -rw-r--r-- 1 root wheel 470 5 25 2008 org.pqrs.PCKeyboardHack.load.plist
ç½®ãå ´æã¯ããã§ãã
/Library/LaunchDaemons/ 㯠root:wheel ææãªã®ã§ãããã«ãã¡ã¤ã«ãä½ãæ㯠sudo ãã¾ãã
$ less kanonji.gnump3d.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>KeepAlive</key> <true/> <key>Label</key> <string>kanonji.gnump3d</string> <key>ProgramArguments</key> <array> <string>/usr/bin/gnump3d</string> <string>--fast</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
æè¿ã¤ã³ã¹ãã¼ã«ãã GNUMP3d ç¨ã® launchd.plist ãä½ã£ãã®ã§ãä¾ã«ãã¦ã¿ã¾ãã
key | 説æ | å¿ é |
Label | launchd ã®ã¸ã§ãã®ååãã¦ãã¼ã¯ãªååãä»ãããå¿ é ãæ £ä¾ãåãããªããã©ããã¡ã¤ã«åããã®Labelã«.plistã¨ããæ¡å¼µåãä»ãããã®ã«ããã | å¿ é |
ProgramArguments | å®è¡ããããã°ã©ã ã¨ãªãã·ã§ã³ãå¼æ°ããä¾ã®éãarrayãã¼ãã«å ¥ãåã§æ¸ãã | å¿ é |
KeepAlive | trueãªã常ã«èµ·åããããã«launchdãããã°ããèµ·åããããã»ã¹ãkillãã¦ãããç«ã¡ä¸ããªãããããboolå以å¤ã«dictionaryåã§ç´°ããæå®ãå¯è½ãããã | falseãããã©ã«ãå¤ |
RunAtLoad | true ãªã launchd ã« launchd.plist ããã¼ããããã¿ã¤ãã³ã°ã§èµ·åããã | ä¸æ |
ãã®è¨å®ã§ãOSãèµ·åããã /usr/bin/gnump3d --fast ãå¼ã°ãã¦èµ·åãã¾ãã
KeepAlive true ãªããããã»ã¹ãè½ã¡ã¦ãç«ã¡ä¸ããªããã¦ãããã¿ããã§ãã
$ launchctl load /Library/LaunchDaemons/kanonji.gnump3d.plist
launchd.plist ãæ¸ããããlaunchd ã®CUIãã¼ã«ã§ãã launchctl ã§ãã¼ããã¾ãã
RunAtLoad ãããã®ã§ããã¼ãããã gnump3d ãèµ·åãã¾ããã
ã¡ãªã¿ã«ãRunAtLoad true ã¯ä¸å¿æ¸ãããã©ãããããã㨠KeepAlive true ãªãä¸è¦ãããããªãã
KeepAlive true ã ã㧠launchd.plist ããã¼ããã¦ããgnump3d ã¯èµ·åãã¦ã¾ããã
OSèµ·åæã¯ã©ããªããã¯ã¾ã æªç¢ºèªã§ãã
launchd.plist ã®ãã¼ä¸è¦§
http://journal.mycom.co.jp/articles/2007/12/11/iul01/005.html
http://journal.mycom.co.jp/articles/2007/12/11/iul01/006.html
launchd.plistãæ¸ãGUIãã¼ã«
launchd.plist ã¯XMLã§ãæ´ã«keyãã¼ãã®æ¬¡ã«ãã®ãã¼ãã«å¯¾å¿ããå¤ãã¼ããæ¥ãã¨ãããã¡ãã£ã¨å¤ãã£ãææ³ãªã®ã§ããã¾ãæã§æ¸ãããã¯ããã¾ããã
ãªã¼ãã³ã½ã¼ã¹ã§ Lingon.app ã¨ãããã¼ã«ãããã®ã§ãããã使ãã¾ãã
ãã ãæ´æ°ã2008å¹´ã§æ¢ã¾ã£ã¦ãã®ã§ãLingonã§ä½ã£ã launchd.plist ãä¸é¨ä¿®æ£ãã¦ä½¿ãã¾ãã
å
·ä½çã«ã¯ãæå®ãã¦ç¡ãã®ã« WatchPaths ã¨ãããã¼ã¨ QueueDirectories ã¨ãããã¼ãæå®ããã¦ããã£ã¦ã ããªãã§ããã©ã
å¤ãã¼ãã空ãªã®ã§ããã¶ãåé¡ã¯ç¡ãã¨æããã©ä¸å¿ãã®2ã¤ã¯ vi ã§æ¶ãã¾ããã
ä¸ããé ã«ã(1)㧠Label ãæ¸ãã¦ã(2)㧠ProgramArguments ãæ¸ãã¦ã(3)㧠KeepAlive 㨠RunAtLoad ãå«ãããã¤ãã®ãã¼ãè¨å®ã§ããã ãã£ã¦æãã§ãã
æ°ããè¨å®ãä½ãæãæåã«ã¿ã¤ããé¸ã¶ãã¤ã¢ãã°ãã§ã¾ãã
ãã®èª¬æã¯æ¬¡ã§ã
Daemon 㨠Agent
- Daemon
- ã·ã¹ãã ã®ä¸é¨ã¨ãã¦ããã¯ã°ã©ã¦ã³ãã§åä½ããããã»ã¹ãç¹å®ã®ã¦ã¼ã¶ã¼ã¨çµã³ã¤ãã¦ããªããGUIãæã¦ãªãã
- Agent
- ç¹å®ã®ã¦ã¼ã¶ã¼ç¨ã®ããã¯ã°ã©ã¦ã³ãããã»ã¹ãGUIãæã¦ãã
ãã£ããã¨è¨ãã°ãããªæãã§ãã
~/Library/LaunchAgents/ | My Agents | ãã¼ã ãã£ã¬ã¯ããªå ãªã®ã§ãèªåç¨ã®ã¨ã¼ã¸ã§ã³ã |
/Library/LaunchAgents/ | Users Agents | ã¦ã¼ã¶ã§å ±æã®ã¨ã¼ã¸ã§ã³ã |
/Library/LaunchDaemons/ | Users Daemons | ãã¼ã¢ã³ |
Lingon ã®ãã¤ã¢ãã°ã§ã3ã¤ã®ã¿ã¤ããããã¾ããã launchd.plist ã®ç½®ãå ´æã«ãã£ã¦å¤ããã¾ãã
gnump3d ã¯ååã®æå¾ã« d ãããæ§ã«ããã¼ã¢ã³ãªã®ã§ /Library/LaunchDaemons/ ã«è¨ç½®ãã¾ããã
/System/Library/LaunchAgents/ 㨠/System/Library/LaunchDaemons/
Lingon ã®å·¦å´ã«ã SYSTEM AGENTS 㨠SYSTEM DAEMONS ã¨ããã¾ãã
ããã¯ãã¶ããOS X ã®ã·ã¹ãã ã®è¨å®ã¨æãããã®ã§ãã¦ã¼ã¶ã¼ã追å ãããå¤æ´ãããã¨ããã®ã¯ãåºæ¬çã«å¿
è¦ãªãã¨æãã¾ãã
ããã«ããã¨ããäºãè¦ãã¦ããã°ããã©ãã«æã«è§£æ±ºã®ç³¸å£ãæ¢ããããããã¾ããã
launchctlã®ä½¿ãæ¹
$ launchctl list PID Status Label 3440 - 0x112230.launchctl 3388 - [0x0-0x166166].org.lingon.Lingon 2597 - 0x112950.bash 2596 - 0x112860.login 2533 - 0x111390.bash 2532 - 0x111ae0.login 592 - [0x0-0x42042].org.mozilla.thunderbird 574 - [0x0-0x3f03f].com.apple.AppleSpell ä¸ç¥ - 1 kanonji.gnump3d 以ä¸ç¥
ãã¼ãæ¸ã¿ã®è¨å®ãä¸è¦§ã«è¡¨ç¤ºãã¾ãã
PID ã«æ°åãæ¸ãã¦ããã°ããã»ã¹ãèµ·åãã¦ã¾ãã
Status ã®æå³ã¯ã¡ãã£ã¨èª¿ã¹ããã¦ã¾ããã
$ launchctl load /Library/LaunchDaemons/kanonji.gnump3d.plist $ vi /Library/LaunchDaemons/kanonji.gnump3d.plist $ launchctl unload /Library/LaunchDaemons/kanonji.gnump3d.plist $ launchctl load /Library/LaunchDaemons/kanonji.gnump3d.plist
ãã¼ãã¨ã¢ã³ãã¼ã㯠launchd.plist ãæå®ãã¾ãã
launchd.plist ãå¤æ´ããå ´åãä¸æ¦ unload ãã¦å度 load ãå¿
è¦ã§ãã
$ launchctl start kanonji.gnump3d $ launchctl stop kanonji.gnump3d
start ã stop*1 ã¯ã¸ã§ãã©ãã«ãæå®ãã¾ãã
ãã詳ãã使ãæ¹ã¯Documentation Archiveã
éæ¨å¥¨ãªæ段
起動項目(SystemStarter)
/Library/StartupItemsãã£ã¬ã¯ããªå
¥ãããã®ã§ãWindowsã§è¨ãã¨ããã®ã¹ã¿ã¼ãã¢ããã®æ§ãªãã®ã ã£ãã¨æãã¾ãã
StartupItems ã LaunchDaemons ç¥ããªãã£ãã®ã§ãæåã¯ãããæ··åãã¡ãã£ã¦ã¾ããããlaunchd ã¨ã¯å¥ã®ä»çµã¿ã¿ããã§ãã
OS X 10.4ããã¯èµ·åé
ç®ã«ä»£ãããlaunchd ã®ä½¿ç¨ãæ¨å¥¨ããã¦ãã¾ãã
inetdおよびxinetdデーモン
OS X 10.4 ãã㯠launchd ã®ä½¿ç¨ãæ¨å¥¨ããã¦ã¾ãã
cron
cronã«ã¤ãã¦ã¯ããã¥ã¡ã³ããè¦ã¤ããã¾ããã§ããã
åè
*1:KeepAlive true ãªè¨å®ãããããã»ã¹ã¯ stop ãã¦ãç´ãç«ã¡ä¸ãç´ããã¾ããæ¢ããã«ã¯ unload ã§ãã