100

スクリプトを30分ごとに実行するにはどうすればよいですか?OSごとに異なる方法があると思います。OSXを使用しています。

4

7 に答える 7

155

launchdを使用するだけです。これは非常に強力なランチャー システムであり、Mac OS X の標準的なランチャー システムでもあります (現在の OS X バージョンは、これなしでは起動できません)。launchd(または一般的な OS X に)慣れていない人にとってはinit、 、cronat、 SysVinit ( init.d)、inetdupstartおよびsystemd. これらすべてのプロジェクトの概念を借用しながら、他の場所では見られないものも提供しています。

すべてのサービス/タスクはファイルです。ファイルの場所は、「このサービスはいつ実行される予定ですか?」という質問によって異なります。および「サービスにはどの権限が必要ですか?」

システムタスクは次の場所に移動します

/Library/LaunchDaemons/

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

ユーザーがログインしている場合にのみ実行する場合は、

/Library/LaunchAgents/

ログインしたばかりのユーザーの権限で実行されます。

ログインしている場合にのみ実行する場合は、

~/Library/LaunchAgents/

~ は HOME ディレクトリです。これらのタスクは、コマンド ラインまたは Finder でファイルをダブルクリックして自分で開始したかのように、ユーザーの権限で実行されます。

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

すべてlaunchdのタスクは、PLIST 形式のファイルです。逆ドメイン名表記にする必要があります。たとえば、タスクに名前を付けることができます

com.example.my-fancy-task.plist

この plist には、さまざまなオプションと設定を含めることができます。片手で 1 つ書くのは初心者向けではないため、LaunchControl (無料) やLingon (商用、14.99 ドル) などのツールを入手してタスクを作成することをお勧めします。

例として、次のようになります

<?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>

このエージェントは、シェル スクリプト /usr/local/bin/my-script.sh を 1800 秒ごと (30 分ごと) に実行します。また、特定の日時にタスクを実行することもできます (基本的に、launchd は cron が実行できるすべてのことを実行できます)。または、「オンデマンド」を無効にして、launchd がプロセスを永続的に実行し続けるようにすることもできます (プロセスが終了またはクラッシュした場合、launchd はすぐに再起動します)。 . プロセスが使用できるリソースの量を制限することもできます。

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

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

launchctl <command> <parameter>

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

更新: loadunloadstartおよびstopは引き続き機能しますが、現在はレガシーです。新しいコマンドはbootstrapbootoutenable、およびdisableで、構文とオプションが若干異なります。大きな違いの 1 つdisableは永続的であるため、サービスを無効にすると、再度有効にするまで再起動後も無効のままになります。またkickstart、実行するように構成されている方法に関係なく、すぐにタスクを実行するために使用できます。

新しいコマンドと古いコマンドの主な違いは、「ドメイン」によってタスクが分離されていることです。システムにはドメインがあり、すべてのユーザーもそうです。したがって、同じようにラベル付けされたタスクが異なるドメインに存在してlaunctlも、それらを区別できます。同じユーザーの異なるログインおよび異なる UI セッションでさえ、独自のドメインを持ち (たとえば、同じユーザーが一度ローカルにログインし、一度 SSH 経由でリモートにログインすると、いずれかのセッションで異なるタスクが実行される可能性があります)、実行中のすべてのプロセスも同様です。したがって、 の代わりにまたはをcom.example.my-fancy-task使用してタスクを識別し、501 は特定のユーザーのユーザー ID です。system/com.example.my-fancy-taskuser/501/com.example.my-fancy-task

plist 形式launchctlコマンド ライン ツールのドキュメントを参照してください。

于 2008-09-25T13:43:27.990 に答える
60

非常に便利な plist ジェネレーターを使用できます: http://launched.zerowidth.com/ (何も購入する必要はありません…)

すでに推奨されているlaunchdで新しいスケジュールされたジョブを登録するためのシェルワンライナーを提供します

于 2013-10-25T11:50:39.773 に答える
14

MacOSX では、少なくとも次のオプションがあります。

  • 「スクリプトの実行」アクションによる iCal アラームの繰り返し
  • 起動した
  • cron (リンク1、リンク2 )

個人的な経験から、cron が最も信頼できます。私がテストしたところ、launchd には多くのバグや癖がありました。iCal アラームは、ログインしている場合にのみ実行されます (ただし、それは好みのものかもしれません)。

于 2008-09-25T12:30:48.790 に答える
8

Meckiが指摘したように、launchdはこれを実現する方法です。起動されたファイルを手動で編集するのではなく、Lingonと呼ばれるlaunchd用のGUIインターフェイスがあります。

Lingonは、Mac OS XLeopard10.5用の編集用のlaunchd構成ファイルを作成するためのグラフィカルユーザーインターフェイスです。

[をちょきちょきと切る...]

このバージョンでは、構成ファイルの編集がこれまでになく簡単になり、2つの異なるモードがあります。非常にシンプルなインターフェイスですぐに利用できる最も一般的な設定を備えた基本モードと、すべての設定をテキストに直接追加するか、メニューから挿入できるエキスパートモード。

于 2008-09-25T16:10:45.047 に答える
2

Apple スクリプトについては、特別な iCal カレンダーをセットアップし、アラームを使用して定期的に実行しています。コマンド ライン ツールには、launchd を使用します。

于 2008-09-25T14:31:47.250 に答える