4

古いMacから新しいMacへの移行。

古いMacにあったユーザーcrontabを移行しようとしています。

/etc/crontab を作成することでおそらく cron を実行できることがわかりましたが、Apple が launchd を支持して cron を非推奨にしたことを考えると、crontab を launchd plist ファイルに移行することを考えてみました。新しいことを学ぶのはいつも楽しいです:)

crontab はそれほど難しいものではありません。私は、作業を行うシェル スクリプトをセットアップして、スケジュールされた時間に呼び出すだけにする傾向があります。

これらを plist から同時に呼び出すことができます。問題はありません。

しかし、私の crontab の上部には MAILTO=my-gmail-email-address があったので、ボックスのメール スプールでローカル ユーザーにメールを送信する代わりに、gmail に送信してくれました。

launchd plist ファイルに対してこれを構成できるようには見えません。

したがって、すべてのスクリプトを変更してすべての出力を tmp ファイルにリダイレクトする前に、tmp ファイルをメールで送信します (かなりの数のスクリプトでこれを行う必要があります)。launchd レベルでこれを行う方法はありますか?

4

2 に答える 2

3

残念ながら、launchd(8) はそのままでは stdout/stderr のメール送信をサポートしていません。回避策は次のとおりです。

専用ディレクトリ内のファイルを介しStandardOutPathて出力をリダイレクトします。StandardErrorPath次に、このディレクトリ内のすべてのファイルをメール送信するジョブをセットアップします。キーを使用してこのジョブをトリガーしQueueDirectoriesます。ファイルをメール送信した後、このスクリプトがファイルを削除することを確認してください。

于 2013-05-20T05:14:52.733 に答える
2

launchd に変換する 1 つの方法は怠惰な方法です (方法)

App Store から Lingon に $0.99 を支払います。次に、いくつかのフィールドに入力するだけで、起動します...

それ以外の場合: launchd は次のようになります

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>name of launchd</string>
    <key>ProgramArguments</key>
    <array>
        <string>[terminal command to execute]</string>
    </array>
    <key>RunAtLoad</key>
    <[(true)/(false)]/>
    <key>StartCalendarInterval</key>
    <dict>
        [any of these options are removable]
        [for everyday remove the Day and Weekday tags]
        <key>Day</key>
    <integer>[day of the month]</integer>
    <key>Weekday</key>
    <integer>[day of the week 0-7 - (sunday=0);]</integer>
        <key>Hour</key>
        <integer>[hour of day (military time)]</integer>
        <key>Minute</key>
        <integer>[minute]</integer>
    </dict>
</dict>
</plist>

[] のいずれかは、コメント (削除する必要があります) またはオプションのリストです。

launchctl コマンドを使用して、launchd をマウントします。

于 2013-05-19T02:33:05.977 に答える