OSXで/etc/cron.d/エミュレーション

OSXで/etc/cron.d/エミュレーション

ほとんどの最新のUNIXでは、cronは各/etc/cron.dタスクが指定されたユーザーとして実行される個々のcrontabファイルをサポートしています。これらのファイルを編集すると、crontabが自動的に更新されます。これにより、個々のパッケージはグローバルcrontabを汚染したり、ユーザー固有のcrontabを使用せずに独自の自動化タスクをインストールできます。

OSXはこれをサポートしていないようです。これは本当ですか?

それでは、これを実装するための最良の方法は何ですか?私はOSXで開発していますが、Linuxで本番コードを実行しているので、launchdの代わりにcrondを使用する必要があります。後者が潜在的な利点を持っているにもかかわらず。

ベストアンサー1

OS Xではlaunchdを使用する必要があります。これを実装するために例を挙げて説明します。

そのフォルダに移動して、/Users/your-username/Library/LaunchAgents次のplistファイルを保存します。名前をで指定しましたが、com.username.testscript.plist自由に変更できます。

<?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>com.your-username.testscript</string>

  <key>ProgramArguments</key>
  <array>
    <string>/Users/your-username/bin/testscript.sh</string>
  </array>

  <key>Nice</key>
  <integer>1</integer>

  <key>StartInterval</key>
  <integer>60</integer>

  <key>RunAtLoad</key>
  <true/>

  <key>StandardErrorPath</key>
  <string>/tmp/com.your-username.testscript.err</string>

  <key>StandardOutPath</key>
  <string>/tmp/com.your-username.testscript.out</string>
</dict>
</plist>

文書は非常に自明です。 60秒ごとにコマンドを実行し、/Users/your-username/bin/testscript.shロード時に実行され、エラーを保存して/tmp/com.username.testscript.errログインします/tmp/com.username.testscript.out

ディレクトリ/Library/LaunchAgents/またはを使用することもできます/Library/LaunchDaemos/

おすすめ記事