[ mac-service管理130209.txt ] Macのサービス管理 ~~~~~~~~~~~~~~~~~ July 9, 2011 February 9, 2013 ■ launchd管理コマンドlaunchctl ・launchdによって管理されるサービスはplist設定ファイルに設定する(XMLで記述 する書式 launchd.plistは man で調べる)。 launch.plistをGUIで記述するツールLingonを利用できる。 ・launchctlのサブコマンド: - load (-w) 設定ファイルパス:サービスをロードする。-w を指定すると Disabledキーにfalseを設定する。 - unload (-w) 設定ファイルパス:サービスをアンロードする。-w を指定すると Disabledキーにtrueを設定する。 - list :サービスの一覧を表示 - start ラベル :このラベルのサービスを開始。(機能詳細は不明) - stop ラベル :このラベルのサービスを停止。(機能詳細は不明) ・ Disabledキーはサービスの無効(true)・有効(false)を設定する。全てのサービス のDisabledキー設定値は1つのファイルに保存される: /var/db/launchd.db/com.apple.launchd/overrides.plist v 10.6からは -w オプションによってplist設定ファイルのDisabled キー設定値 を変更することはできない。 ・ launchd はデーモン起動の他、ネットワークポート監視、時刻監視、ファイルや ディレクトリの変化監視等、多様なイベント監視機構をもつ。 plist設定ファイルのOnDemandにfalseを指定するとサービスは常駐するが、trueを 指定した場合、サービスはイベント駆動になる. ・ OS起動時にサービスを自動起動するためには (Linuxのcheckconfig 機能相当) Disabled false かつOnDemand false にする。
・ plist設定ファイルの OnDemand(v10.6からKeepAlive)キーがfalseの 常駐サービスは、サービスがロードされると直ちに起動する。またstop サブコマンドにより停止後再び起動する。
※参考資料
- マニュアル:man lanchctl , man lanchcd.plist - 参考文献 :Mac OS X 10.5 as UNIX p.163, 337 ■ ファイル共有 ・GUI (システム環境設定→共有) により起動・停止できるサービス service plist --- httpd /System/Library/LaunchDaemons/org.apache.httpd.plist ftp /System/Library/LaunchDaemons/ftp.plist
[ mac-service管理130209.txt ] smb /System/Library/LaunchDaemons/smbd.plist, nmbd.plist ssh /System/Library/LaunchDaemons/ssh.plist vnc ・共有ディレクトリ: /capture, /macmini を共有設定画面から指定する。 ・samba (smb+nmb)設定ファイルについて これらのファイルに画面指定が反映される。 /etc/smb.conf /var/db/smb.conf : /etc/smb.confからインクルード /var/db/samba/smb.shares : /etc/smb.confからインクルード ・/var/db/samba/smb.sharesの共有セクション内容
create mask と directory maskは画面入力生成値を修正した。 [capture] comment = capture path = /capture available = yes guest ok = yes create mask = 666 directory mask = 777 read only = no [macmin] comment = macmin path = /macmin available = yes guest ok = yes create mask = 666 directory mask = 777 read only = no ・コンピュータ名、Bonjour名、NetBIOS名を別々に命名できる ■ snmp (OnDemand=false) (/usr/sbin/snmpd ) ・plist (Launchd の設定ファイル) /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist ・設定ファイルは /etc/snmp/snmpd.conf ・launchdの配下ではなく、単独に起動することもできるがMac起動時にサービス を開始するためにはlaunchdの管理下におくのがよい ・ launchdコマンド操作: (1) snmp のプロセス番号確認 # ps aux | grep snmp root 96516 0.0 0.1 2437852 4136 ?? Ss 8:43AM 0:01.56 snmpd -f (2) launchd の管理を外す
# launchctl unload /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist (3) snmp のプロセスは消える
[ mac-service管理130209.txt ]
(4) launchd の管理へ戻す
# launchctl load /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist (5) snmp のプロセス番号確認 (番号は変更された)
# ps aux | grep snmp
root 96619 0.0 0.1 2437844 4004 ?? Ss 8:49AM 0:00.04 snmpd -f (6) launchd stop でプロセス番号が変わる
# launchctl stop org.net-snmp.snmpd (※ start/ stop はラベルを指定) # ps aux | grep snmp root 96684 0.0 0.1 2437844 4004 ?? Ss 8:53AM 0:00.04 snmpd -f ■ httpd (OnDemand=false) (/usr/sbin/httpd ) :システム標準値を変更していない ・plist(Launchd の設定ファイル) /System/Library/LaunchDaemons/org.apache.httpd.plist ・設定ファイル: /etc/apache2/httpd.conf ・設定ファイルインクルード: /etc/apache2/extra/*, /etc/apache2/other/* ・DocumentRoot: /Library/WebServer/Documents ・サーバ/クライアントともにGUI画面からもhttpdの起動・停止が可能
■ postfix ( OnDemand=true ) ( /usr/sbin/postfix ) ・plist(Launchd の設定ファイル) /System/Library/LaunchDaemons/org.postfix.master.plist ・デーモンは以下のようにQueueDirectoriesキーを使用してディレクトリを 監視、必用に応じて起動する. <key>QueueDirectories</key> <array> <string>/var/spool/postfix/maildrop</string> </array> ・設定ファイルは /etc/postfix/main.cf so-netのOP25Bに対応し、so-netの指定するSMTPサーバを経由してメールを 外部に送出する設定を追加。 relayhost = [mail.so-net.ne.jp]:587
smtp_sasl_auth_enable = yes ( smtpd_sasl_auth_enableではない! ) smtp_sasl_password_maps = hash:/etc/postfix/authinfo
パスワードファイル/etc/postfix/authinfoは別途作成しdb化する。 ・独自コマンドの利用が可能:postfix start/stop/reload/check ・postfixは最初からmac os 10.6 に導入されている
メール中継機能はない。
■ BIND9 (OnDemand=false) (/usr/sbin/named ) ・plist(Launchd の設定ファイル)
[ mac-service管理130209.txt ]
・設定ファイルは /etc/named.conf - cache サーバに設定
・自動起動設定:
- launchctl load -w /System/Library/LaunchDaemons/org.isc.named.plist ・BIND9は最初からmac os 10.6 に導入されている
■ TUN / TAP (OnDemand=false) ・plist(Launchd の設定ファイル)
Launchd の設定ファイル/Library/LaunchDaemons/org.macports.tuntaposx.plist
■ OpenVPN2 (OnDemand=false ) (/opt/local/sbin/openvpn2, openvpn2-client) ・plist (Launchd の設定ファイル) - 富山サーバ :/Library/LaunchDaemons/openvpn2.plists - 大塚サーバのクライアント: /Library/LaunchDaemons/openvpn2-client.plists ・サーバー設定ファイルは /etc/openvpn2/server.conf - /etc/openvpn2/easy-rsa/下は各種証明書や秘密鍵を作成する環境として設定 ・クライアント設定ファイルは /etc/openvpn2/ohtsuka.ovpn ・openvpn2.plistの内容 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd";> <plist version="1.0"> <dict> <key>Label</key> <string>org.openvpn2</string> (*) <key>OnDemand</key> <false/> <key>Program</key> <string>/opt/local/sbin/openvpn2</string> <key>ProgramArguments</key> <array> <string>openvpn2</string> <string>--config</string> <string>server.conf</string> (*) </array> <key>RunAtLoad</key> <true/> <key>TimeOut</key> <integer>90</integer> <key>WorkingDirectory</key> <string>/etc/openvpn2</string> </dict> </plist>
[ mac-service管理130209.txt ] ■ ntp (KeepAlive ) (/usr/sbin/ntpd ) ・plist (Launchd の設定ファイル ) /System/Library/LaunchDaemons/org.ntp.ntpd.plists ・設定ファイルは /etc/ntp.conf - server time.asia.apple.com ・状態表示は ntpq -p ※ launchd.plist設定ファイルで使用するキーについて (WikiPedia等ネットワーク情報より) ・Label ジョブの名称。慣習により、ジョブの名称は.plist拡張子を除いたplistの ファイル名とおなじ。 必須。 ・Program 実行ファイルへのパス。シンプルな起動に役立つ。 ProgramかProgramArgumentsのどちらか一つが必須。 ・ProgramArguments unixコマンドを表した文字列。はじめの文字列はふつう実行ファイルへのパスで、 あとの文字列はオプションやパラメータを含む。 ProgramかProgramArgumentsのどちらか一つが必須。 ・UserName ここで与えられたユーザでジョブを実行する。必ずしもそれをlaunchdにサブミット したユーザでなくてもよい。 オプション。デフォルトではrootかカレントユーザ。 ・OnDemand 10.5では非推奨。ジョブを持続的に実行するかどうかを定義するブーリアンフラグ。 オプション。デフォルトではtrue。 ・RunAtLoad launchdにジョブがロードされたときすぐにタスクを起動するかどうかを定義する ブーリアンフラグ。 オプション。デフォルトではfalse。 ・StartOnMount 新しいファイルシステムがマウントされたときにタスクを起動するかどうかを定義 するブーリアンフラグ。 オプション。デフォルトではfalse。 ・QueueDirectories 新しいファイルがないかディレクトリを監視する。開始するにはディレクトリは 空でなければならない。また、QueueDirectoriesがふたたびタスクを起動する まえに空の状態にもどさなければならない。 オプション。 ・WatchPaths 変更がないかファイルかフォルダのパスを監視する。 オプション。
[ mac-service管理130209.txt ] ・StartInterval ジョブをくり返して実行するスケジュールにする。実行のあいだのウェイト秒数 として指定される。 オプション。 ・StartCalendarInterval ジョブスケジューリング。構文はcronと同様。 オプション。 ・Label launchd のジョブの名前。ユニークな名前を付ける。必須か慣例か分からないけど、 ファイル名もこのLabelに.plistという拡張子を付けたものにする。 必須。 ・ProgramArguments 実行するプログラムとオプションや引数を、arrayノードに入れ子で書く。 必須。 ・KeepAlive trueなら常に起動するようにlaunchdががんばる。起動したプロセスをkillしても すぐ立ち上げなおされる。bool型以外にdictionary型で細かい指定が可能。 falseがデフォルト値。 ・RunAtLoad
true なら launchd に launchd.plist がロードされたタイミングで起動する。
[ net-snmp-mrtg.txt ] net-snmp-mrtg 2011/06/14 2013/02/09 ■ snmpd 設定ファイル: /etc/snmp/snmpd.conf ######################################################################## # Access Control ######################################################################## com2sec local localhost public
com2sec securenet 192.168.0.0/16 public ####
group local_group v1 local group local_group v2c local group secure_group v1 securenet group secure_group v2c securenet ####
view all included .1 80
#view view_mib2 included .1.3.6.1.4.1.2021 fc ####
access local_group "" any noauth exact all all none access secure_group "" any noauth exact all none none #### syslocation /etc/snmp/snmpd.conf syscontact Root<[email protected]> #### proc sshd 20 1 disk / 10% ■ launchd設定ファイル: /System/Library/LaunchDaemons/org.net-snmp.snmpd.plist <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>org.net-snmp.snmpd</string> <key>OnDemand</key> <false/> <key>Program</key> <string>/usr/sbin/snmpd</string> <key>ProgramArguments</key> <array> <string>snmpd</string> <string>-f</string> </array> <key>ServiceIPC</key> <false/> </dict> </plist> ※ snmpd デーモン起動:
[ net-snmp-mrtg.txt ]
■ MRTG
Linuxサーバ上のMRTGから snmpデータを取得(/etc/mrtg/mrtg.cfg)し、 同サーバのwebサーバでデータ表示
[ MacのCRON20130117.txt ] Launchd における CRON 機能 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2011/7/8 2013/01/17 ******************************** Launchdがもつcron機能 ******************************** ■ periodic # /System/Library/LaunchDaemons/com.apple.periodic-daily.plist <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.apple.periodic-daily</string> <key>ProgramArguments</key> <array> <string>/usr/sbin/periodic</string> <string>daily</string> </array> <key>LowPriorityIO</key> <true/> <key>Nice</key> <integer>1</integer> <key>StartCalendarInterval</key> (※) <dict> <key>Hour</key> <integer>3</integer> <key>Minute</key> <integer>15</integer> </dict> <key>AbandonProcessGroup</key> <true/> </dict> </plist> ■ newsyslog # /System/Library/LaunchDaemons/com.apple.newsyslog.plist <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.apple.newsyslog</string> <key>ProgramArguments</key> <array> <string>/usr/sbin/newsyslog</string> </array> <key>LowPriorityIO</key>
[ MacのCRON20130117.txt ] <true/> <key>Nice</key> <integer>1</integer> <key>StartCalendarInterval</key> (※) <dict> <key>Minute</key> <integer>30</integer> </dict> </dict> </plist> ***************************** 従来からの cronデーモンを起動 ***************************** ■ cron (RunAtLoad) - RunAtLoad: launchdにジョブがロードされたときすぐにタスクを起動する # /System/Library/LaunchDaemons/com.vix.cron.plist (旧) <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.vix.cron</string> <key>ProgramArguments</key> <array> <string>/usr/sbin/cron</string> </array> <key>RunAtLoad</key> <true/> <key>WatchPaths</key> (※) <array> <string>/etc/crontab</string> </array> <key>QueueDirectories</key> (※) <array> <string>/var/cron/tabs</string> </array> </dict> </plist> ※ このリストでは、WatchPathsで/etc/crontabを、QueueDirectoriesで /var/cron/tabsディレクトリを監視するように指定されている。 インストール直後/etc/crontabには何の設定もされておらず、/var/cron/tabsも 空になっている。しかし、crontabファイルを編集したりcrontabコマンドで /var/cron/tabs以下にユーザーごとのcrontabが登録されると、launchdはcronを 起動し、それらの処理を任せる。こうすることで、従来からのUNIXユーザーや 開発者がcrontabを使ったソフトウェアを使用しても何ら問題ないようにできている。 QueueDirectoriesキーを使用してディレクトリを監視する例としては、postfix デーモンが挙げられる。postfixは以下のようにスプールを監視、必用に応じて
[ MacのCRON20130117.txt ] <key>QueueDirectories</key> <array> <string>/var/spool/postfix/maildrop</string> </array> ■ cron (KeepAlive) # /System/Library/LaunchDaemons/com.vix.cron.plist (新) <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.vix.cron</string> <key>ProgramArguments</key> <array> <string>/usr/sbin/cron</string> </array> <key>KeepAlive</key> (*) <dict> <key>PathState</key> <dict> <key>/etc/crontab</key> <true/> </dict> </dict> <key>QueueDirectories</key> (*) <array> <string>/usr/lib/cron/tabs</string> </array> <key>EnableTransactions</key> <true/> </dict> </plist> ※ 設定ファイルで使用するキーについて(WikiPedia等ネットワーク情報より) ・Label ジョブの名称。慣習により、ジョブの名称は.plist拡張子を除いたplistの ファイル名とおなじ。 必須。 ・Program 実行ファイルへのパス。シンプルな起動に役立つ。 ProgramかProgramArgumentsのどちらか一つが必須。 ・ProgramArguments unixコマンドを表した文字列。はじめの文字列はふつう実行ファイルへのパスで、 あとの文字列はオプションやパラメータを含む。 ProgramかProgramArgumentsのどちらか一つが必須。 ・UserName
[ MacのCRON20130117.txt ] ここで与えられたユーザでジョブを実行する。必ずしもそれをlaunchdにサブミット したユーザでなくてもよい。 オプション。デフォルトではrootかカレントユーザ。 ・OnDemand 10.5では非推奨。ジョブを持続的に実行するかどうかを定義するブーリアンフラグ。 オプション。デフォルトではtrue。 ・RunAtLoad launchdにジョブがロードされたときすぐにタスクを起動するかどうかを定義する ブーリアンフラグ。 オプション。デフォルトではfalse。 ・StartOnMount 新しいファイルシステムがマウントされたときにタスクを起動するかどうかを定義 するブーリアンフラグ。 オプション。デフォルトではfalse。 ・QueueDirectories 新しいファイルがないかディレクトリを監視する。開始するにはディレクトリは 空でなければならない。また、QueueDirectoriesがふたたびタスクを起動する まえに空の状態にもどさなければならない。 オプション。 ・WatchPaths 変更がないかファイルかフォルダのパスを監視する。 オプション。 ・StartInterval ジョブをくり返して実行するスケジュールにする。実行のあいだのウェイト秒数 として指定される。 オプション。 ・StartCalendarInterval ジョブスケジューリング。構文はcronと同様。 オプション。 ・Label launchd のジョブの名前。ユニークな名前を付ける。必須か慣例か分からないけど、 ファイル名もこのLabelに.plistという拡張子を付けたものにする。 必須。 ・ProgramArguments 実行するプログラムとオプションや引数を、arrayノードに入れ子で書く。 必須。 ・KeepAlive trueなら常に起動するようにlaunchdががんばる。起動したプロセスをkillしても すぐ立ち上げなおされる。bool型以外にdictionary型で細かい指定が可能。 falseがデフォルト値。 ・RunAtLoad
true なら launchd に launchd.plist がロードされたタイミングで起動する。