タスクを頻繁に実行するように設定するにはどうすればよいですか?
-
02-07-2019 - |
質問
スクリプトをたとえば 30 分ごとに実行するにはどうすればよいですか?OSごとにやり方が違うと思います。OS Xを使用しています。
解決
ただ使用してください 起動. 。これは非常に強力なランチャー システムであり、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 フォルダーをいじると、システムが使用できなくなる可能性があります (再起動さえ拒否される状態に陥る可能性があります)。これらは、Apple が launchd
起動中にシステムを起動して実行するタスク、必要に応じてサービスを自動的に開始するタスク、システム メンテナンス タスクを実行するタスクなどです。
毎 launchd
タスクにはplist形式のファイルがあります。ドメイン名の逆表記が必要です。例えば。タスクに名前を付けることができます
com.example.my-fancy-task.plist
この plist にはさまざまなオプションと設定を含めることができます。片手で 1 つずつ書くのは最適ではないため、無料のツールを入手することをお勧めします。 リンゴン タスクを作成します。このツールは以前は無料でしたが、現在はアプリストアで 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>
このエージェントは、シェル スクリプト /usr/local/bin/my-script.sh を 1800 秒ごと (30 分ごと) に実行します。また、特定の日時にタスクを実行することもできます (基本的に、launchd は cron が実行できるすべてのことを実行できます)。または、「オンデマンド」を無効にして、launchd がプロセスを永続的に実行し続けるようにすることもできます (プロセスが終了またはクラッシュした場合、launchd はすぐにプロセスを再起動します)。 。プロセスが使用できるリソースの量を制限することもできます (前述したように、Lingon はこれらすべての設定を優れた UI インターフェイスで表示します)。
アップデート: それでも OnDemand
はまだサポートされていますが、非推奨です。新しい設定の名前は次のとおりです KeepAlive
, 、それははるかに理にかなっています。ブール値を指定することもできますが、その場合は次の値とまったく逆になります。 OnDemand
(に設定すると false
あたかものように振る舞う OnDemand
は true
そしてその逆)。優れた新機能は、ブール値の代わりに辞書値を持つこともできることです。辞書値がある場合は、タスクを存続させる状況をより細かく制御できる追加のオプションがいくつかあります。例えば。プログラムが終了コード 0 で終了した場合、ディスク上の特定のファイル/ディレクトリが存在する場合、別のタスクも生存している場合、またはネットワークが現在稼働している場合にのみ、生存し続けます。
コマンドラインからタスクを手動で有効/無効にすることもできます。
launchctl <command> <parameter>
コマンドは、plist をロードするか、再度アンロードするために、load または unload にすることができます。この場合、パラメーターはファイルへのパスです。または、コマンドを start または stop にして、そのようなタスクを開始または停止することもできます。この場合、パラメーターはラベル (com.example.my-fancy-task) です。他のコマンドとオプションも同様に存在します。
Apple のドキュメントを参照してください。 plist形式 そして launchctl
コマンドラインツール (フォーマット/オプションは OS X リリースごとに異なるため、一番上で OS X バージョンを選択できることに注意してください)
他のヒント
非常に便利な plist ジェネレーターを使用できます。 http://launched.zerowidth.com/ (何も買わなくてもいいのですが…)
すでに推奨されているジョブに新しいスケジュールされたジョブを登録するためのシェルのワンライナーが提供されます。 起動
Mecki 氏が指摘したように、これには launchd が最適です。launchd には GUI インターフェイスがあります。 リンゴン launchd ファイルを手動で編集するのではなく、次のことを確認してください。
Lingonは、Mac OS X Leopard 10.5用の編集起動設定ファイルを作成するためのグラフィカルユーザーインターフェイスです。
[をちょきちょきと切る...]
このバージョンでは、構成ファイルの編集はこれまで以上に簡単で、2つの異なるモードがあります。最も一般的な設定を備えた基本モードは、非常にシンプルなインターフェイスおよびエキスパートモードで簡単に利用でき、テキストに直接すべての設定を追加したり、メニューに挿入したりできます。
MAC OSには、 オートメータ と同じツール タスクスケジューラ 窓の中で。また、Automator を使用すると、毎日タスクをスケジュールし、そのタスクを定期的なカレンダー イベントにリンクして、毎日指定した時間にスクリプトを実行できます。リンクを参照 Mac OS でスクリプトを毎日実行するには
Apple スクリプトの場合は、特別な iCal カレンダーを設定し、アラームを使用して定期的に実行します。コマンド ライン ツールには、launchd を使用します。
ご参考までに:そのシンプルさがとても恋しいですが、OS X では cron は過去のものになりました。それはパンサーの番犬でした。Tiger以来発売されています。したがって、Leopard を実行している場合、cron はオプションではありません。