如果要設定使用者登入時要執行的項目,從 System Preferences > Users & Groups > Login Items 設定即可。 |
SystemStarter 開機時會掃過 /System/Library/StartupItems (系統用) 與 /Library/StartupItems (可自訂) 底下所有的 startup item。已知 MySQL 跟 VirtualBox 都是這麼做的。
Startup item 用一個資料夾來表示,例如 /Library/StartupItems/MyItem,底下要有兩支檔案:
- 跟資料夾同名的 start script,其實就是個 shell script (executable)。
- StartupParameters.plist
/Library/StartupItems/MyItem/MyItem (executable)
#!/bin/sh . /etc/rc.common StartService() { # echo MyItem start >> /tmp/MyItemService.log ... } StopService() { # echo MyItem stop >> /tmp/MyItemService.log ... } RestartService() { StopService StartService } RunService "$1" |
主要是取得 RunService 的定義,但也間接載入了 /etc/hostconfig 裡的開關,可供 startup script 參考。 | |
可以用這個簡單的指令來做測試。 |
RunService 其實是定義在 /etc/rc.common 裡:
## # Generic action handler ## RunService () { case $1 in start ) StartService ;; stop ) StopService ;; restart) RestartService ;; * ) echo "$0: unknown argument: $1";; esac } |
所以之後可以透過下面的指令來測試 service:
/Library/StartupItems/MyItem/MyItem start|stop|restart
/Library/StartupItems/MyItem/StartupParameters.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd"> <plist version="0.9"> <dict> <key>Description</key> <string>MyItem</string> <key>Provides</key> <array> <string>MyItem</string> </array> <key>Requires</key> <array> <string>Network</string> </array> <key>OrderPreference</key> <string>Late</string> </dict> </plist> |
重開機,理當要看到 /tmp/MyItemService.log 有一行 “MyItem start"。
所有的 startup items 預設都是以 root 的身份在執行,如果有以其他使用者留份執行的需求,用 runas 會有效果,雖然網路上找不太到類似的資料。 |
參考資料
|