MAC
 Computer >> コンピューター >  >> システム >> MAC

macOSでlaunchdを使用してスケジュールどおりにスクリプトを実行する方法

macOSでlaunchdを使用してスケジュールどおりにスクリプトを実行する方法

launchdは、スクリプトとプロセスを開始、停止、および管理するためのツールです。 Linuxのいずれかのバージョンを使用したことがある場合は、cronに精通している可能性があります。 launchdは基本的にmacOSではcronです。

デーモンとは何ですか?

macOSでlaunchdを使用してスケジュールどおりにスクリプトを実行する方法

デーモン(「デーモン」と発音)は、バックグラウンドで実行されるスクリプトです。アプリケーションとは異なり、デーモンはプロセスとして実行され、ユーザーや別のアプリケーションの直接の制御下にはありません。 macOSでは、起動および停止するタイミングを決定する起動済みフレームワークの制御下にあります。

珍しい名前は、熱力学思考実験で分子を分類する架空のエージェントであるマクスウェルの悪魔に由来しています。

スクリプトの作成

macOSでlaunchdを使用してスケジュールどおりにスクリプトを実行する方法 macOSでlaunchdを使用してスケジュールどおりにスクリプトを実行する方法

launchdを介してデーモンを実行するには、いくつかのスクリプトを作成する必要があります。最も一般的なスクリプト言語はbashです。 bashスクリプトについて詳しく知りたい場合は、bashスクリプトの初心者向けガイドをご覧ください。

launchdの使用

macOSでlaunchdを使用してスケジュールどおりにスクリプトを実行する方法

launchdのスクリプトは、特定のディレクトリに保存されている.plistファイルであるジョブ定義によってトリガーされます。これらのXMLファイルは、ジョブに名前を付け、起動するスクリプトを指定し、スクリプトをいつ実行するかを示します。スクリプトを作成したら、適切なタイミングでスクリプトを起動するジョブ定義を作成して読み込みます。

ジョブの定義は次のようになります:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>local.restart</string>
        <key>Program</key>
        <string>/Users/user/Scripts/restart.sh</string>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

必要に応じて変更し、拡張子が.plistのテキストファイルに入れてから、正しいディレクトリにドロップします(以下を参照)。

職務記述書にはいくつかの重要な部分があります:

  • ラベル: launchd内のジョブの名前。ジョブごとに一意である必要があります。これらは逆ドメイン表記で記述されており、「ローカル」はプライベートエージェントにとって優れたドメインです。
  • プログラム: このジョブの説明が起動するスクリプトのフルパス。
  • RunAtLoad: スクリプトをいつ実行するかを説明します。ここにはいくつかの異なるオプションがあります:
    • RunAtLoad :ジョブ定義がロードされるとすぐに実行されます。ロードごとに1回だけ実行されます。
    • StartInterval nごとにジョブを開始します 秒。この例では、7200秒ごとまたは2時間ごとにジョブを実行します。
      <key>StartInterval</key> 
      <integer>7200</integer>
    • StartCalendarInterval :特定の日時にジョブを実行します。以下のコードは、毎日午前9時にジョブを実行します。
      <key>StartCalendarInterval</key> 
      <dict>
        <key>Hour</key> 
        <integer>9</integer> 
        <key>Minute</key> 
        <integer>0</integer> 
      </dict>

エージェントとデーモン

職務記述書を作成したら、適切なディレクトリに保存する必要があります。

launchdは、エージェントとデーモンをさらに区別します。ログインしたユーザーに代わってエージェントが実行され、rootユーザーの下でデーモンが実行されます。つまり、スクリプトを特定のユーザーアカウントに制限する場合は、エージェントを使用できます。誰がログインしていても何かを実行したい場合は、デーモンを使用します。

エージェントとデーモンの違いは、それらがコンピューターに保存されている場所にあります。

  • 「〜/ Library / LaunchAgents」は、ログインしているユーザーに代わって実行されます
  • 「/Library/ LaunchDaemons」は、ルートユーザーに代わって実行されます

plistを正しい場所に保存する必要があります。

launchctlへのジョブのロード

macOSでlaunchdを使用してスケジュールどおりにスクリプトを実行する方法

スクリプトを作成してエージェントを適切な場所に保存したら、それをlaunchctlに読み込む必要があります。 。これは、将来のログイン時に自動的に発生します。

laucnhctlで現在実行されているものを確認するには、launchctl listを使用できます。 ターミナルで。この巨大なリストは、次のようなラベルを付けることで、スクリプト用に作成できます。

launchctl list | grep local.restart

スクリプトをロードするには、ターミナルを開き、次のコマンドを使用します。

launchctl load ~/Library/LaunchAgents/local.restart.plist
macOSでlaunchdを使用してスケジュールどおりにスクリプトを実行する方法

launchctlキューからスクリプトを削除するには、unloadを使用します コマンド:

launchctl unload&nbsp;~/Library/LaunchAgents/local.restart.plist
macOSでlaunchdを使用してスケジュールどおりにスクリプトを実行する方法

ジョブをロードすると、そのジョブはlaunchdキューに入れられ、ジョブは起動条件で指定された時間に実行されます。何があってもすぐにスクリプトを実行したい場合は、「開始」コマンドを使用する必要があります。

launchctl start local.restart

このコマンドはジョブのラベルを取得し、ジョブがすでにlaunchctlにロードされている場合にのみ機能します 。

結論

launchdを使用して、ファイルのクリーンアップ、スケジュールに従ってサーバーの再起動、特定のファイルが表示されたときにアプリケーションを実行するなどのスクリプトを作成できます。 launchdの詳細については、laucnhdチュートリアルをご覧ください。


  1. macOS でターミナル コマンドラインを使用する方法

    Windows にコマンド プロンプト アプリケーションがあるのと同じように、macOS には、コマンドの実行や OS の変更に使用できるターミナルがあります。ターミナルは、システム設定を変更したり、ファイルやアプリを開いたり、タスクを実行したりするために使用できる macOS 専用のコマンドライン アプリケーションです。 Apple によって開発されたターミナルは、アップデートごとにデフォルトの macOS アプリとしてプリロードされています。ターミナル アプリは Mac のユーティリティ フォルダにあります。 つまり、ターミナルは Mac のコマンド プロンプトです。 Mac でコマ

  2. macOS Catalina の新しいセキュリティ コントロールの使用方法

    Apple は、数か月前に Macintosh マシン用の macOS Catalina アップグレードをリリースしました。これには、たくさんの便利な機能が搭載されています。 Catalina はたまたま macOS Mojave の後継であり、これまでのところ Apple の最大のアップグレードです。この最新の macOS バージョンには、Mac で iPad をセカンダリ スクリーンとして使用できる Sidecar、オート ダーク モード、改良された Notes アプリ、プライバシーとセキュリティの強化など、いくつかの革新的な機能が含まれています。 特にセキュリティについて言えば、Ap