launchdを使ってMac Os X でスクリプトの定期実行を登録する

Blog Single

みなさん、こんにちは。

まだまだ暑い日が続いてますね、渋谷です。

今回はMac OS X でスクリプトを定期実行してみたいと思います。
定期実行と聞くとcronを思い浮かべる方が多いかと思いますが、今回はlaunchdを使ってみようと思います。
実行するスクリプトですが、私が前回の記事で書いたスクリプトで良さそうです。

launchdとは

launchdはデーモン、アプリケーション、プロセス、スクリプトの起動・停止・管理を行う、オープンソースのサービス管理フレームワークである。
出典:launchd – Wikipedia

launchdの設定ファイルはXML形式で記述し、拡張子はplist(プロパティリスト)です。

ファイルの置き場所は以下の通りです。
– ~/Library/LaunchAgents ・・・ユーザーが管理するユーザー毎のエージェント
– /Library/LaunchAgents ・・・管理者が管理するユーザー毎のエージェント
– /Library/LaunchDaemons ・・・管理者が管理するシステム全体のデーモン
– /System/Library/LaunchAgents ・・・OSが管理するユーザー毎のエージェント
– /System/Library/LaunchDaemons ・・・OSが管理するシステム全体のデーモン

※エージェント・・・ユーザー単位で起動される。
※デーモン・・・システム全体で1つだけ起動される。

設定ファイルの記述

ファイル名はarticle.plistで作成し、~/Library/LaunchAgents直下に置くこととします。
スケジューリングですが、今回は平日の朝8時10分に実行されるように設定してみます。


<!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>article</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/python3</string>
            <string><path>/scraping.py</string>
            <string>blockchain</string>
        </array>
        <key>StartCalendarInterval</key>
        <array>
            <dict>
                <key>Weekday</key>
                <integer>1</integer>
                <key>Hour</key>
                <integer>8</integer>
                <key>Minute</key>
                <integer>10</integer>
            </dict>
            <dict>
                <key>Weekday</key>
                <integer>2</integer>
                <key>Hour</key>
                <integer>8</integer>
                <key>Minute</key>
                <integer>10</integer>
            </dict>
            <dict>
                <key>Weekday</key>
                <integer>3</integer>
                <key>Hour</key>
                <integer>8</integer>
                <key>Minute</key>
                <integer>10</integer>
            </dict>
            <dict>
                <key>Weekday</key>
                <integer>4</integer>
                <key>Hour</key>
                <integer>8</integer>
                <key>Minute</key>
                <integer>10</integer>
            </dict>
            <dict>
                <key>Weekday</key>
                <integer>5</integer>
                <key>Hour</key>
                <integer>8</integer>
                <key>Minute</key>
                <integer>10</integer>
            </dict>
        </array>
        <key>StandardOutPath</key>
        <string>/dev/null</string>
        <key>StandardErrorPath</key>
        <string>/dev/null</string>
    </dict>
</plist>

<dict>タグ内はkey-valueとなっています。

  • Label・・・ジョブの名前で、一意でなければならない(必須)
  • ProgramArguments・・・実行するプログラム、オプション、引数などを指定する(必須)
  • StartCalendarInterval・・・実行のスケジューリング
  • StandardOutPath・・・ログの置き場所
  • StandardErrorPath・・・エラーログの置き場所

登録

下記コマンドを実行することで、設定を登録できます。

launchctl load ~/Library/LaunchAgents/article.plist

解除

下記コマンドで登録の解除ができます。

launchctl unload ~/Library/LaunchAgents/article.plist

まとめ

業務でcronを使う事はありましたが、launchdを使った事はなかったので今回使ってみました。
launchdには登録時に設定できるオプションなど、紹介していないものもあるので気になった方は使ってみてはいかがでしょうか。

参考

A launchd Tutorial

Posted by ShibuyaYuuki
今はPHPで開発を行なっているエンジニア。 就職してから体重が15キロ増えました!!

Other Posts: