1. ホーム
  2. macos

[解決済み] タスクを頻繁に実行するように設定するにはどうすればよいですか?

2022-12-10 06:18:38

質問

例えば30分ごとにスクリプトを実行させるにはどうしたらよいでしょうか。 OS によって異なる方法があると思います。 私は OS X を使用しています。

どのように解決するのですか?

ただ launchd . これは非常に強力なランチャーシステムで、一方でMac OS Xの標準ランチャーシステムでもあります(現在のOS Xバージョンはこれなしでは起動すらしません)。をよく知らない人のために launchd (あるいは OS X 全般) に馴染みのない方のために説明しますと、このシステムは init , cron , at , SysVinit ( init.d ), inetd , upstartsystemd . これらのプロジェクトのコンセプトを借りながら、他にはないものを提供します。

すべてのサービス/タスクはファイルです。ファイルの場所は、「このサービスはいつ実行されることになっているのか」、「このサービスはどのような特権を必要とするのか」という質問に依存します。

システムタスクは

/Library/LaunchDaemons/

を実行する場合、どのユーザがシステムにログインしているかどうかに関係なく、実行されます。それらは "root" 権限で開始されるでしょう。

もし、以下の場合にのみ実行されるのであれば の場合のみ実行されます。 のユーザがログインしている場合にのみ実行されるのであれば、次のようになります。

/Library/LaunchAgents/

で、先ほどログインしたユーザーの権限で実行されます。

もし、以下の場合にのみ実行されるのであれば の場合のみ実行されます。 がログインしているときのみ実行される場合、それらは

~/Library/LaunchAgents/

ここで、~はあなたのホームディレクトリです。これらのタスクは、コマンドラインやFinderでファイルをダブルクリックして自分で起動したのと同じように、あなたの権限で実行されます。

また /System/Library/LaunchDaemons/System/Library/LaunchAgents の下にあるものは、通常通り /System にあるものはすべて OS X によって管理されています。あなたが何をしているかを本当に理解していない限り、そこにファイルを置いたり、ファイルを変更したりしてはいけません。Systems フォルダをいじくり回すと、システムが使用不能になる可能性があります (再起 動を拒否するような状態になることもあります)。これらは、Apple が launchd タスクが配置されるディレクトリで、起動時にシステムを稼働させたり、必要に応じてサービスを自動的に開始したり、システムのメンテナンス タスクを実行したりします。

すべての launchd タスクには plist 形式のファイルがあります。これは、逆ドメイン名表記でなければなりません。例えば、タスクの名前を

com.example.my-fancy-task.plist

このplistは様々なオプションや設定を持つことができます。片手間に書くのは最適ではないので、無料のツールを入手するとよいでしょう リンゴン を利用してタスクを作成するとよいでしょう。このツールは以前は無料でしたが、現在はアプリストアで5ドル、非アプリストア版として10ドルかかります(非アプリストア版の方がはるかに強力なので、すでにお金を払うつもりなら、マジで非アプリストア版を買ってください)。もし誰かがフリーウェアやオープンソースの同等のツールを知っていたら、コメントで私に一行送ってください、私はむしろそのツールを推薦します (ここで商用ソフトウェアの宣伝をしたくありません)。

例として、次のようなものがあります。

<?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.example.my-fancy-task</string>
    <key>OnDemand</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/usr/local/bin/my-script.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>1800</integer>
</dict>
</plist>

このエージェントは、1800秒毎(30分毎)にシェルスクリプト /usr/local/bin/my-script.sh を実行します。また、特定の日時にタスクを実行させたり(基本的に launchd は cron ができることは全てできます)、quot; OnDemand" を無効にして launchd にプロセスを常時実行させることもできます(プロセスが終了するかクラッシュすると launchd は直ちにそれを再開します)。プロセスが使用するリソースの量を制限することもできます (先に述べたように、Lingon はこれらの設定をすべて素晴らしい UI インターフェースで表示します)。

アップデートです。 にもかかわらず OnDemand はまだサポートされていますが、非推奨です。新しい設定の名前は KeepAlive と名付けられ、より意味のあるものになっています。これはブール値を持つことができ、その場合は OnDemand (に設定する)。 false のように動作します。 OnDemandtrue であり、その逆もしかり)。素晴らしい新機能は、ブーリアン値ではなくディクショナリ値を持つことができることです。辞書値を持つ場合、いくつかの追加オプションがあり、どのような状況でタスクが生かされるかをより細かく制御することができます。例えば、プログラムが終了コード0で終了している間だけ、ディスク上の特定のファイル/ディレクトリが存在する間だけ、他のタスクも生きている場合だけ、ネットワークが現在稼働している場合だけ、などです。

また、コマンドラインから手動でタスクを有効化/無効化することもできます。

launchctl <command> <parameter>

コマンドは plist をロードしたり、アンロードしたりすることができます。また、コマンドは start や stop で、そのようなタスクを開始または停止します。この場合、パラメータはラベル (com.example.my-fancy-task) になります。他のコマンドやオプションも存在する。

の Apple のドキュメントを参照してください。 plist フォーマット launchctl コマンドラインツール (フォーマットやオプションが異なる OS X リリース間で異なるため、上の OS X バージョンを選択できることに注意してください)