スクリプトを30分ごとに実行するにはどうすればよいですか?OSごとに異なる方法があると思います。OSXを使用しています。
スクリプトを30分ごとに実行するにはどうすればよいですか?OSごとに異なる方法があると思います。OSXを使用しています。
回答:
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/
ここで、〜はホームディレクトリです。これらのタスクは、コマンドラインまたはFinderでファイルをダブルクリックして自分で開始した場合と同じように、自分の権限で実行されます。
そこにも存在していることを注意/System/Library/LaunchDaemons
して/System/Library/LaunchAgents
、しかし、いつものように、下のすべては/System
あなたがそこに任意のファイルを配置してはならないOS Xで管理されているあなたは本当にあなたが何をしているか知っている限り、あなたは、そこに任意のファイルを変更してはなりません。Systemsフォルダーをいじくり回すと、システムが使用できなくなる可能性があります(システムの再起動を拒否する状態になります)。これらは、Appleがlaunchd
起動時にシステムを起動して実行したり、必要に応じてサービスを自動的に開始したり、システムメンテナンスタスクを実行したりするタスクを配置するディレクトリです。
すべてのlaunchd
タスクには、plist形式のファイルがあります。ドメイン名の表記を逆にする必要があります。たとえば、タスクに名前を付けることができます
com.example.my-fancy-task.plist
このplistには、さまざまなオプションと設定があります。手ごとに1つ書くのは最適ではありません。タスクを作成するには、無料のツールLingonを入手することをお勧めします。このツールは以前は無料でしたが、現在はアプリストアで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が実行できるすべてのことを実行できます)。または、「OnDemand」を無効にして、launchdがプロセスを永続的に実行し続けるようにすることもできます(終了またはクラッシュした場合、launchdはすぐに再起動します) 。プロセスが使用できるリソースの量を制限することもできます(前述のように、Lingonはこれらすべての設定を優れたUIインターフェイスに表示します)。
アップデート: にもかかわらずOnDemand
、まだサポートされている、それが推奨されていません。新しい設定の名前はKeepAlive
、はるかに理にかなっています。それは正反対である場合にはブール値、有することができるOnDemand
(に設定するfalse
かのように動作OnDemand
されtrue
且つ他の方法ラウンドを)。優れた新機能は、ブール値の代わりにディクショナリ値を使用できることです。ディクショナリ値がある場合は、タスクを存続させる状況下で、よりきめ細かい制御を可能にするいくつかの追加オプションがあります。たとえば、プログラムが終了コード0で終了した場合、ディスク上の特定のファイル/ディレクトリが存在する場合、別のタスクも有効な場合、またはネットワークが現在稼働している場合にのみ、有効になります。
また、コマンドラインから手動でタスクを有効/無効にすることもできます。
launchctl <command> <parameter>
コマンドは、ロードまたはアンロード、plistのロードまたはアンロードを行うことができます。この場合、パラメーターはファイルへのパスです。または、コマンドを開始または停止して、そのようなタスクを開始または停止することもできます。この場合、パラメーターはラベル(com.example.my-fancy-task)です。他のコマンドとオプションも存在します。
plist形式とlaunchctl
コマンドラインツールに関するAppleのドキュメントを参照してください(形式/オプションはOS Xのリリースによって異なるため、OS Xのバージョンを上から選択できることに注意してください)。
StartCalendarInterval
2つの辞書の配列を持つ@MaciekRekは、キーMinute
と値が1回00
と1回の両方で、30
要求したとおりに実行されます。将来的にはコメントではなく質問として質問してください。そうすれば、最終的な辞書を表示することもできます(コメントではそれを行うことはできません)。このサイトはすべて質問をすることについてです。質問について誰かにヒントを与えたい場合は、質問へのリンクをコメントとして投稿してください。質問自体は投稿しないでください。
非常に便利なplistジェネレーターを使用できます:http://launched.zerowidth.com/(何も購入する必要はありません…)
すでに推奨されているlaunchdに新しいスケジュールされたジョブを登録するためのシェルワンライナーを提供します
Meckiが指摘したように、launchdはこれを実現する方法です。起動されたファイルを手動で編集するのではなく、Lingonと呼ばれるlaunchd用のGUIインターフェイスがあります。
Lingonは、Mac OS X Leopard10.5用の編集起動構成ファイルを作成するためのグラフィカルユーザーインターフェイスです。
[をちょきちょきと切る...]
このバージョンでは、構成ファイルの編集がこれまでになく簡単になり、2つの異なるモードがあります。非常にシンプルなインターフェイスですぐに利用できる最も一般的な設定を備えた基本モードと、すべての設定をテキストに直接追加するか、メニューから挿入できるエキスパートモード。
MAC OSには、Windowsのタスクスケジューラと同じAutomatorツールがあります。また、Automatorを使用すると、タスクを毎日スケジュールし、タスクを定期的なカレンダーイベントにリンクして、毎日指定した時間にスクリプトを実行できます。MacOSで毎日スクリプトを実行するためのリンクを参照してください
参考までに:私はそれが単純さを欠いている間、cronはOSXでは過去のものです。それはパンサーの番犬でした。Tiger以来発売されています。したがって、Leopardを実行している場合、cronはオプションではありません。
cronを使用してタスクをスケジュールできます。
crontab -e
ジョブは次の形式で指定されます。
* * * * * command to execute
│ │ │ │ │
│ │ │ │ └─── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
│ │ │ └──────── month (1 - 12)
│ │ └───────────── day of month (1 - 31)
│ └────────────────── hour (0 - 23)
└─────────────────────── min (0 - 59)
例:
0 12 * * * cd ~/backupfolder && ./backup.sh
cronタスクをインストールしたら、crontab-lを使用してタスクを一覧表示できます。
crontab -l
cronスケジュール式について詳しく知りたい場合は、
https://crontab.guru https://ole.michelsen.dk/blog/schedule-jobs-with-crontab-on-mac-osx.html