[ mac-service管理130117.txt ] Macのサービス管理 ~~~~~~~~~~~~~~~~~ July 9, 2011 January 17, 2013 ■ サービス管理コマンドlaunchctl ・launchctlのサブコマンド: - load (-w) 設定ファイルパス:サービスをロードする。-w を指定すると Disabledキーにfalseを設定する。 - unload (-w) 設定ファイルパス:サービスをアンロードする。-w を指定すると Disabledキーにtrueを設定する。 - start ラベル :このラベルのサービスを開始。 - stop ラベル :このラベルのサービスを停止。 - list :サービスの一覧を表示 ・ Disabledキーはサービスの無効(true)・有効(false)を設定する。全ての サービスのDisabledキー設定値は1つのファイル /var/db/launchd.db/com.apple.launchd/overrides.plist に保存される。v 10.6からは -w オプションによってplist設定ファイルの Disabled キー設定値を変更することはできない。 ・ launchd はネットワーク接続、時間、ファイルやディレクトリの変化等 多様なイベント監視機構をもつ.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 smb /System/Library/LaunchDaemons/smbd.plist, nmbd.plist ssh /System/Library/LaunchDaemons/ssh.plist vnc ・共有ディレクトリ: /capture, /macmini を共有設定画面から指定する。 ・samba (smb+nmb)設定ファイルについて
[ mac-service管理130117.txt ] /etc/smb.conf /var/db/smb.conf : /etc/smb.confからインクルード /var/db/samba/smb.shares : /etc/smb.confからインクルード 後の2つは GUI画面からの設定が反映されているので編集しない。 ・コンピュータ名、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 のプロセスは消える
# ps aux | grep snmp (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 の設定ファイル)
[ mac-service管理130117.txt ] ・デーモンは以下のように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 の設定ファイル)
/System/Library/LaunchDaemons/org.isc.named.plist ・設定ファイルは /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
[ mac-service管理130117.txt ]
・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> (* client→org.openvpn2-client) <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> (* client→ ohtsuka.ovpn) </array> <key>RunAtLoad</key> <true/> <key>TimeOut</key> <integer>90</integer> <key>WorkingDirectory</key> <string>/etc/openvpn2</string> </dict> </plist> ■ ntp (KeepAlive ) (/usr/sbin/ntpd ) ・plist (Launchd の設定ファイル ) /System/Library/LaunchDaemons/org.ntp.ntpd.plists ・設定ファイルは /etc/ntp.conf - server time.asia.apple.com ・状態表示は ntpq -p
[ MacのCRON20130117.txt ] Launchd における CRON 機能 2011/7/8 2013/01/17 ******************************** Launchdがもつcron機能 デーモンは起動しない <key>StartCalendarInterval</key> ******************************** ■ 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>
[ MacのCRON20130117.txt ] </array> <key>LowPriorityIO</key> <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ディレクトリを監視するように指定されている。Tigerの インストール直後/etc/crontabには何の設定もされておらず、/var/cron/tabsも 空になっている。しかし、crontabファイルを編集したりcrontabコマンドで /var/cron/tabs以下にユーザーごとのcrontabが登録されると、launchdはcronを 起動し、それらの処理を任せる。こうすることで、従来からのUNIXユーザーや 開発者がcrontabを使ったソフトウェアを使用しても何ら問題ないようにできている。 QueueDirectoriesキーを使用してディレクトリを監視する例としては、postfix
[ MacのCRON20130117.txt ] デーモンが挙げられる。postfixは以下のようにスプールを監視、必用に応じて 起動する。 <key>QueueDirectories</key> <array> <string>/var/spool/postfix/maildrop</string> </array> ■ cron (KeepAlive) - KeepAlive: 常に起動するようにlaunchdが動作する。起動したプロセスを killしてもすぐ立ち上げなおされる。bool型以外にdictionary型で細かい 指定が可能。 # /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のどちらか一つが必須。
[ MacのCRON20130117.txt ] ・ProgramArguments unixコマンドを表した文字列。はじめの文字列はふつう実行ファイルへのパスで、 あとの文字列はオプションやパラメータを含む。 ProgramかProgramArgumentsのどちらか一つが必須。 ・UserName ここで与えられたユーザでジョブを実行する。必ずしもそれを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がデフォルト値。
[ MacのCRON20130117.txt ]
・RunAtLoad
true なら launchd に launchd.plist がロードされたタイミングで起動する。
[ net-snmp-mrtg.txt ] net-snmp-mrtg 2011/06/14 2013/01/19 ■ net-snmp ・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>Disabled</key> <true/> <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> ・設定ファイル: /etc/snmp/snmp.conf ######################################################################## # Access Control ######################################################################## com2sec local localhost public
com2sec securenet 192.168.0.0/16 secure ####
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%
[ net-snmp-mrtg.txt ]
・自動起動設定: launchctl unload -w org.net-snmp.snmpd.plist
■ mrtg (以下はネットワーク情報( macOSX 10.5 にインストール)を参考にした) ・インストール: port install mrtg
・mrtg設定ファイル作成:
/opt/local/bin/cfgmaker --output=/usr/local/mrtg/mrtg.cfg [email protected] ・mrtg.cfg を Linux のmrtg を参考にして編集 ・mrtgディレクトリ/Library/webServer/Documents/mrtg Apache2公開ディレクトリに作成 ・crontab (root) を設定しmrtgを5分間隔で起動 */5 * * * * /opt/local/bin/mrtg /usr/local/mrtg/mrtg.cfg
[ macos-newsyslog.txt ] 【Mac OS X】newsyslogを使ってログローテートする ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ July 8, 2011 Mac OS Xにおいて定期的なログローテートを行うには「newsyslog」を使う。 Apacheのログについて設定する。 設定ファイル「/private/etc/newsyslog.conf」に、以下の行を追加。 #### Apache用の設定 (時間でローテートする例) /var/log/apache2/access_log 644 7 * $W1D04 JB /var/run/httpd.pid /var/log/apache2/error_log 644 7 * $W1D04 JB /var/run/httpd.pid #### Apache用の設定 (容量でローテートする例) /var/log/apache2/access_log 640 5 100 * J /var/run/httpd.pid /var/log/apache2/error_log 640 5 100 * J /var/run/httpd.pid ■newsyslog.confの設定
logfilename [owner:group] mode count size when flags [/pid_file] [sig_num] 各部の説明 logfilename ログファイル名 owner:group 新しく作るログファイルの所有権(省略可) mode 新しく作るログファイルのパーミッション count 保存するログの限度数 size ローテートを始めるサイズ(KB単位) when ローテートを始める時刻 flags 圧縮状態などを決めるフラグ /pid_file pid ファイルへのパス(省略可) sig_num ローテート時にプロセスへ送るシグナル(省略可) sizeとwhenはどちらか片方しか指定できず、もう片方には「*」を置いておく。 フラグ一覧 B newsyslogがローテートしたことをログ自身に記さない。 C 指定されたログが存在しなければ作成する。 D 新しく作成するログファイルにUF_NODUMPフラグを付ける *1 。 G 指定されたログファイル名をシェルの規則によって展開する。 J 古いログファイルをbzip2(1)で圧縮する。 N ログファイルをローテートするときにシグナルを送るプロセスは存在しない。 U 指定されたpidファイルに含まれるIDはプロセスのIDではなく、 プロセスグループのIDである。 Z 古いログファイルをgzip(1)で圧縮する。 - 何も意味しない。後に続く文字列をフラグと区別するために使う。 「size」指定はキロバイト単位で行う。例えば、「100」を指定した場合、 ログファイルが100KBに達するたびにローテートが行われる。 「when」指定は複雑だ。書式としては@形式と$形式の2つがある。 @形式 「@YYYYMMDDThhmmss形式」で絶対時刻を指定する。しかし、後述する理由で 分以下の指定にはあまり意味がない。
[ macos-newsyslog.txt ] @20100315T043000 2010年3月15日4時30分 @15T043000 毎月15日4時30分 @T3000 毎時30分 $形式 これは更に5つの形式に分かれる。 $Dhh 毎日hh時 $Ww 毎週w曜日 $WwDhh 毎週w曜日hh時 $Mdd 毎月dd日 $MddDhh 毎月dd日hh時 記号 取り得る値 hh 0~23 w 0(日)~6(土) dd 1~31、L(晦日) 纏めると、一番初めに挙げた例「$W1D04 JB」は次のような意味になる。 ・毎週月曜日4時に実行する ・ファイルをbzip2で圧縮する。 ・ログファイルにローテートしたことを記さない。 ■ newsyslogの起動 例えば、Linuxに於いてのログローテートはlogrotateコマンドをcronで定期的に 実行することで行う。Mac OS XにおいてLinuxにおけるcronの役目に当たるのは launchdである。 launchdの設定ファイル群は/System/Library/LaunchDaemons にある。newsyslogに 関する設定ファイルを見てみよう。 # cat 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> <true/> <key>Nice</key> <integer>1</integer> <key>StartCalendarInterval</key> <dict> <key>Minute</key> <integer>30</integer>
[ macos-newsyslog.txt ] </dict> </dict> </plist> newsyslogは毎時30分に起動する。つまり少なくとも初期設定のままでは、 newsyslog.confでは分単位の指定には意味がないのだ。毎時一回の実行というのは 用途から言えば十分ではあるが、最初に試したときは指定した時間になっても起動 せず、30分後に実行されたので面食らってしまった。 ※ PIDファイルの指定はしておかないとローテションがうまくいかないようです。 これはログファイルのサイズが100KBに到達し、ログのローテーションが行われても、 「Web共有機能」はその作業が終了したことにが気がつかず「あれ?私が記述しない といけないログファイルはどこに行ったの?」な状態になるからのようです。 なので間違えないようにPIDファイルの指定のところも入力しておきましょう。 もし必要があればPIDファイルの指定の後ろにスペースを入れ、さらに30と追記し、 シグナルの指定もしておくとよいかもしれません。