起動時にiMacでbashシェルスクリプトを実行する

起動時にiMacでbashシェルスクリプトを実行する

/var/tmp/test.sh私のiMacで無限ループで実行されるbashシェルスクリプトがありますwhile

このスクリプトを年中無休で24時間実行したいと思います。 iMacが再起動されても、スクリプトは自動的に実行する必要があります。

年中無休の24時間バックグラウンドプロセスで実行されるシェルスクリプトを実行したいと思います。

迅速で簡単な解決策を提案できますか?どうすればいいですか?

答え1

Appleはまだこれを終了していないのでcron、少なくとも2つの選択肢があると思いますcronLaunchControl

簡単に:

  • cron「古い」コマンドラインUnix。crontabスケジュールを定義するために使用されます。無料でオープンソースで広く使われています。制限を理解すれば使いやすいです。

  • アップルネイティブlaunchdlaunchctlより強力な機能がありますが、cronあなたの質問によると、これらのアドインは不要なようです。しかし、まだ興味がある場合は、知っておくべきことがいくつかあります。最初に知っておくべきことLaunchControl;この単語を使用しましたシンプルあなたの質問によると、これはlaunchctl...LaunchControl強力なGUIスケジューリングメカニズムを提供するサードパーティの商用(無料ではない)アプリケーションですlaunchdlaunchctl すべき

解決策cron

最初のステップは、root(管理者)権限が必要かどうかによって異なります。言及していないので、スクリプトにはshユーザー権限のみが必要であると仮定します。

  1. TerminaliMacのアプリから:
% crontab -e

編集者として選択するように求められますcrontab。どちらを選択するかわからない場合は、nano編集者として選択してください。

crontab選択したエディタで遺言が開きます。

ファイルの一番下に次の行を追加しますcrontab

@reboot /bin/sleep 10; /var/tmp/test.sh >> /Users/<YOURUSERID>/test_sh_log.txt 2>&1 

それを破壊する:

  • @reboot:cronシステムの起動時に次のコマンドを実行するように指示します。

  • /bin/sleep 10cron次のコマンドを実行する前に、10秒間スリープモードに切り替えるように指示します。これは必要ないかもしれませんが、ネットワークサービスを使用したりファイルシステムをマウントしたりすると、システムsleepはスクリプトがそれを呼び出す前にそれを実行する時間があります。

  • /var/tmp/test.sh は実行権限が正しく設定されたスクリプトです。

  • >> /Users/<YOURUSERID>/test_sh_log.txt 2>&1 リダイレクト便利なログファイルのすべての出力も&(エラーメッセージ)を2>&1受け取ります。これは、トラブルシューティングに役立つ場合や、実行中にシェルスクリプトに何かを出力させたい場合に便利です。stdoutstderr

rebootiMacがある場合は、test.shの実行を開始する必要があります。

ついに:

リンゴセキュリティ対策「Appleを満たすために追加の措置を講じる必要があるかもしれないということは絶えず変化しているようです。決定を下します。

関連情報