Mac OS Xで毎日実行するスクリプトを取得するにはどうすればよいですか?


回答:


62

参考までに、3つのオプションはすべて機能します。ただし、iCalオプションには他のオプションよりも多くの制限があります。

(他の回答に記載されているように、cronを編集して起動するGUIがあります)

Cronは最も単純で有名であり、多くのチュートリアルが利用可能です。Coles Notesは、下から最後の行をcrontabに追加します(編集する/etc/crontabcrontab、コマンドラインで使用します)。

MM HH DD MM WKD -- Minutes, Hour, Day, Month, Weekday (eg. Sun, Mon)
MM HH * * * USERNAME /PATH/TO/SCRIPT
00 3 * * * chealion /myscript.sh "Runs at 03:00 every day"

Mac OS Xでは、cron実際に置き換えられてlaunchdいますlaunchdが、下位互換性cronがあり、引き続き使用できますcronが、実際にはlaunchdすべての作業を行っています。

使用したい場合は、launchdここでスーパーユーザーに関する他の質問もチェックしてください:(たとえば、rootdとしてlaunchdコマンドを実行するにはどうすればよいですか?)構成ファイル(plistファイル)を保存する場所について実行されるタイミングは、格納されているディレクトリとロード方法(たとえば、sudoを使用したかどうか)に依存します-cronと同様です。

サンプルの毎日のlaunchd plistの実行(ファイルとラベルが同じであること-ラベルのplistを引いたもの)を次に示します-このスクリプトは毎日深夜3時過ぎに実行されます。

<?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>local.IDENTIFIER_HERE.SOMETHING</string>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <false/>
    <key>UserName</key>
    <string>USERNAME HERE</string>
    <key>Program</key>
    <string>/PATH/TO/SCRIPT</string>
    <key>ProgramArguments</key>
    <array>
        <string>Argument_1</string>
        <string>Argument_2</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>00</integer>
        <key>Minute</key>
        <integer>03</integer>
    </dict>
</dict>
</plist>

また、コンピューターがスリープ状態またはオフになっているときにスケジュールされたタスクを起動した場合、コンピューターが再び使用可能になったときに(オンまたはスリープ解除したときに)実行されることに注意してください-何日であっても1回だけですされました。編集:マシンがオフになっていると、その間は起動イベントが失われる、(スクリプトは起動時に起動しない)、(スリープは起動時にスクリプトを起動する)と書かれたAppleのドキュメントを読んだばかりです


もう1つのオプションは、「at」を使用することです(「man at」でマニュアルページを確認してください)。スクリプトは、たとえば次のように自分自身を再スケジュールできます。

echo "sh $0 $@" | at `date +%H:%M` tomorrow

(10分ごとに実行するには「明日」ではなく「+ 10分」を使用します。スケジューリングを停止するには、「at -l」を実行してスケジュール済みジョブIDをリストし、「at -r id」を実行してジョブを削除します)

まず、対応するデーモン(atrun)を起動する必要があります(https://superuser.com/a/43680を参照)。

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

利点:迅速な修正、sudo / rootアクセスが不要、複雑なスケジュールパターンの実行が容易欠点:OS Xの標準のスケジューリング方法ではない(起動される)


8
先生、サンプルのlaunchd設定ファイルについては、私はあなたにキスすることができます。しかし、私は逃げません。
ポールD.ウェイト

5
launchdOS Xの下に行く方法です。
zneak10年

ええ、それが私の印象でした。Tigerにいくつかの問題があったように聞こえますが、それ以来Appleはそれを改善しているようです。
ポールD.ウェイト

Os 10.7.4では、/ etc / crontabファイルはありません。):私は「which crontab」を実行しましたが、それは/ usr / bin / crontabを与えましたが、それは文字化けしたファイルです。
ヘルマンインジャルドソン

@HermannIngjaldsson / usr / bin / crontabはプログラムです。を使用してターミナルで実行するとcrontab -e、ファイルのターミナルベースのテキストエディターにドロップされ、保存時に個人のcrontabになります。
マークリード

8

LaunchControlは、launchd / launchctl用のもう1つのGUIです。他の人が言及する代替手段は毎日スクリプトを完全に起動できますが、LaunchControlを使用すると、複雑なスケジュールを構成できます(「平日1回、週末は午後2時から8時まで」など)。また、実際にジョブを検証するツールは(AFAIK)のみです。ジョブが期待どおりに機能しない場合は、その理由が示されます。

好きなだけ試してみてください。


3
無料で試用/使用できますが、開発者はライセンスの支払いを希望します。 sites.fastspring.com/somazone/product/shop
ケント

1
絶対に。最初にこの回答を投稿した理由は、開発者をサポートするためです。
マークホール14年

5

CronniXは、Macでcronジョブをスケジュールするための優れたGUIフロントエンドです... cronのドキュメントを調べたくない場合は、かなり適切です。


2
  • iCalについては、この記事をお読みください
  • cronGoogleで検索する場合は、十分なチュートリアルを見つける必要があります。

iCalスクリプトは、ログインしている場合にのみ実行され、cronログインせずにスクリプトを実行します。MacがオフになっているときにiCalがスクリプトを実行するかどうかはわかりません実行されました。cronこれをしています。



2

plist XMLを生成するためのシンプルで無料のユーティリティを次に示します。

http://www.gieson.com/Library/projects/utilities/launcha/

このユーティリティを使用すると、プログラムをインストールする必要はありません。結果をLibrary / LaunchAgentsフォルダーに保存するだけです。


警告:このツールを使用する場合RunAtStartは、それがfalseに設定されていることを確認してください(trueにしたくない場合)。Finderがフリーズし、起動時にデスクトップが読み込まれない理由を理解するのに1時間かかりました。無効にRunAtStartしても、固定スケジュールは妨げられません。
アンドレアラザロット

1

私はいつもこれにLingonを使用していますが、開発中のようです。Crontooieを試すこともできますが、私は個人的に使用したことがありません。または、ターミナルでcrontabファイルを編集します。


私にはリンゴンが活発に開発されているようです。現在のバージョン3は、以前のバージョン2とともにAppStoreで入手できます。どちらも数ドルの費用がかかり、非常に複雑なレビューを受けます。私は個人的にLingon 3を使用して、いくつかの成功が、他の回答(などでのcron、)で言及した他のツールよりこの記事の目的のためにそれをお勧めしません。
ssc

リンゴンを最後に使用したのは2年以上前です。当時はうまく機能していましたが、最近のバージョンは使用していません。残念ながら、以前ほど信頼性が高くありません。
ジョシュ


0
sp@mactop ~ $ crontab -l
*/5 * * * * /usr/local/bin/cinco.sh
sp@mactop ~ $ cat /usr/local/bin/cinco.sh
#!/bin/sh
....cut....
sp@mactop ~ $ 

...「.... cut ....」に投入するコマンドラインは、5分ごとに実行されます。

30年の進歩があり、「cron」は今でも私のお気に入りのスケジューラです。

-C


0

カレンダーイベントがニーズを満たしている場合は、組み込みのAutomatorアプリケーションを使用して、カレンダーイベントによってトリガーされるカレンダーアラームを作成することもできます。組み込みのUIベースのアクションのいくつかを使用して必要な処理を実行したり、アプリケーションまたはカスタムAppleScript、JavaScript、シェルスクリプトを実行させることもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.