MacOSアプリケーションをcron


私はこの時点で長年のRescueTime (Referral Link)を使用している.私は、データがデータが先週のResourttimeで記録されなかったと言っている電子メールを得るとき、常に失望します(記事タイトルの上にイメージを見てください).私に未発表の理由のために、MacOSのメニューバーアプリケーションが実行を停止していた.私はBartender for macOSを使用して特定のメニューバーアプリケーションを非表示にする(彼らはほとんど視覚的な値を提供するように)- ResourTimeは私のビューから隠されていると私はそれが実行されていない気づいたことがない.
私は、それがクラッシュするならば、アプリケーションが走っていたことを確実とする方法を必要としました.

バックグラウンドでアプリケーションを起動cronを使用して
私はcronを知っています、そして、それは定期的にスクリプトを走らせることができます.
私はすぐに以下をまとめます(crontab -eを使用して)
*/5 * * * * open --hide --background /Applications/RescueTime.app

crontab.guruを使用すると、これは5分ごとに再稼働コマンドのopenを実行することがわかります.--hide--backgroundは、アプリケーションが強迫的な方法でオープンしていないことを確認します(すなわちGUIでアプリケーションを考えます).
閉じるこの動画はお気に入りから削除されています.私も他のアプリケーションでこれをテストし、それは主に期待通りに働いた.隠すと背景フラグはいくつかのアプリケーションで動作しませんでした.
正しい取引をしたか?悪い.私は時々、キーストロークか2つが登録しないと気がつきました.私がそれを推測しなければならなかったならば、cronは簡潔にスイッチするために焦点を引き起こしていて、私が現在のアプリケーションでキーストロークを中断するでしょう.
私は、コマンドが走る周波数を減らすことができました.

アプリケーションが実行されていない場合
私の次のアプローチは、それが既に実行されていない場合のみアプリケーションを開くことでした.これは、openが昼間に複数回引き起こされるのを防ぎます.
# Scroll to see full command (it is one line due to fitting in the crontab)
*/5 * * * * app=Rescuetime; ps aux | grep -v grep | grep -ci $app > /dev/null || open --hide --background /Applications/$app.app

これを壊したら
  • open私たちがオープンにしているアプリケーションの変数を設定します.
  • openは、app=Rescuetime;のプロセスを除いて、すべての実行中のプロセスを示し、最終的には、アプリケーションの名前のためにps aux | grep -v grep | grep -ci $app > /dev/null ingの間、見つかる線を数えます.これは0か1で終わる.それが新しいgrepエントリーを作成しないように、stdOUT出力は無効に向けられます.
  • grepは、前のファジー(すなわち、アプリケーションが実行されていない)が
  • であるならば、条件つきで次の声明を走らせます
  • mailは、指定されたアプリケーション
  • をオープンする
    現在、これは予想通りに働きます!私はもはやResuruetimeが実行していない心配する必要はありません.私はアクティブにしたいが、隠されている他のメニューバーアプリケーションのためにこれを行うことがあります.
    私はLinuxでこれを試みませんでした、しかし、私はあなたが類似した何かをすることができると思います(||に等しいと仮定してください).