スクリプトを30分ごとに実行するにはどうすればよいですか?OSごとに異なる方法があると思います。OSXを使用しています。
7 に答える
launchdを使用するだけです。これは非常に強力なランチャー システムであり、Mac OS X の標準的なランチャー システムでもあります (現在の OS X バージョンは、これなしでは起動できません)。launchd
(または一般的な OS X に)慣れていない人にとってはinit
、 、cron
、at
、 SysVinit ( init.d
)、inetd
、upstart
および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
) です。他のコマンドとオプションも存在します。
更新: 、load
、unload
、start
およびstop
は引き続き機能しますが、現在はレガシーです。新しいコマンドはbootstrap
、bootout
、enable
、およびdisable
で、構文とオプションが若干異なります。大きな違いの 1 つdisable
は永続的であるため、サービスを無効にすると、再度有効にするまで再起動後も無効のままになります。またkickstart
、実行するように構成されている方法に関係なく、すぐにタスクを実行するために使用できます。
新しいコマンドと古いコマンドの主な違いは、「ドメイン」によってタスクが分離されていることです。システムにはドメインがあり、すべてのユーザーもそうです。したがって、同じようにラベル付けされたタスクが異なるドメインに存在してlaunctl
も、それらを区別できます。同じユーザーの異なるログインおよび異なる UI セッションでさえ、独自のドメインを持ち (たとえば、同じユーザーが一度ローカルにログインし、一度 SSH 経由でリモートにログインすると、いずれかのセッションで異なるタスクが実行される可能性があります)、実行中のすべてのプロセスも同様です。したがって、 の代わりにまたはをcom.example.my-fancy-task
使用してタスクを識別し、501 は特定のユーザーのユーザー ID です。system/com.example.my-fancy-task
user/501/com.example.my-fancy-task
plist 形式とlaunchctl
コマンド ライン ツールのドキュメントを参照してください。
非常に便利な plist ジェネレーターを使用できます: http://launched.zerowidth.com/ (何も購入する必要はありません…)
すでに推奨されているlaunchdで新しいスケジュールされたジョブを登録するためのシェルワンライナーを提供します
Meckiが指摘したように、launchdはこれを実現する方法です。起動されたファイルを手動で編集するのではなく、Lingonと呼ばれるlaunchd用のGUIインターフェイスがあります。
Lingonは、Mac OS XLeopard10.5用の編集用のlaunchd構成ファイルを作成するためのグラフィカルユーザーインターフェイスです。
[をちょきちょきと切る...]
このバージョンでは、構成ファイルの編集がこれまでになく簡単になり、2つの異なるモードがあります。非常にシンプルなインターフェイスですぐに利用できる最も一般的な設定を備えた基本モードと、すべての設定をテキストに直接追加するか、メニューから挿入できるエキスパートモード。
Apple スクリプトについては、特別な iCal カレンダーをセットアップし、アラームを使用して定期的に実行しています。コマンド ライン ツールには、launchd を使用します。