30 launch control を何とか使ってみる

lastcomm を使うために accounting を enable する、という話を書いたけれど、 システムを再起動すると、disable になってしまう。起動するたびに
sudo /usr/sbin/accton /var/account/acct
相当のことを実行する必要があるらしい。

以前は、起動スクリプトのようなものがあって、それに書き足したけれど、 今はそういうことは launch control でやるのだそうだ (man launchctl してみよ)。


そういえば postfix の自動起動をやったっけ (http://nalab.mind.meiji.ac.jp/~mk/knowhow-2018/node8.html)。


ユーザーごとには ~/Library/LaunchAgents/なんとか.plist を作って設定するみたいだけれど、 これは /Library/LaunchAgents/ の下にファイルを作るみたい。
% ls /Library/LaunchAgents
com.google.inputmethod.Japanese.Converter.plist
com.google.inputmethod.Japanese.Renderer.plist
com.google.keystone.agent.plist
com.google.keystone.xpcservice.plist
com.microsoft.update.agent.plist
com.oracle.java.Java-Updater.plist@
net.pulsesecure.pulsetray.plist
org.freedesktop.dbus-session.plist@
org.freedesktop.dbus-session.plist.mp_1475103973@
org.macosforge.xquartz.startx.plist
%
ほほう。なるほど。そういうのがあるのですね。

“なんとか” は、名前をユニークにすればいい、ということらしいけれど、 そうするために、名前の決め方に何となく慣習があるみたいだ。

今回のは com.local.accton.agent.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>Label</key>
        <string>ユニークな文字列。".plist" つけたのをファイル名にする?</string>
        <key>Program</key>
        <string>プログラムへのフルパス</string>
        <key>ProgramArguments</key>
        <array>
          <string>引数1</string>
           ...
          <string>引数n</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
</dict>
</plist>
/Library/LaunchAgents/com.local.accton.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>Label</key>
    <string>com.local.accton</string>
    <key>Program</key>
    <string>/usr/sbin/accton</string>
    <key>ProgramArguments</key>
    <array>
      <string>/var/account/acct</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

<key>名前</key の後に次のどちらか

設定 (これで指定日時などに実行される)
launchctl load ~/Library/LaunchAgents/なんとか.plist
設定し直し
launchctl unload ~/Library/LaunchAgents/なんとか.plist
launchctl load ~/Library/LaunchAgents/なんとか.plist
すぐに実行 (これでテストできる)
launchctl start ラベル
終了
launchctl stop ラベル

例えば Postfix のときは、システムのものだから、sudo して
sudo launchctl load /Library/LaunchDaemons/local.org.postfix.master.plist

sudo launchctl unload /System/Library/LaunchDaemons/org.postfix.master.plist

ログは /var/log/system.log にたまる。


書いてから気づいたけれど、次のページが割と便利だ。

「LaunchDaemons (launchctl, launchd.plist) の使い方」

ロードされている job の一覧を表示する
sudo launchctl list

-w オプションの説明を書かないと。


でも…今の Mac の lastcomm はちゃんと動いていないような気がするな。



桂田 祐史