3

仮想環境から、Mac で 1 分ごとに Python スクリプトの実行を自動化しようとしています。私は、これを理解するのを妨げているいくつかの重要な方法で、アクセス許可、パス、および環境変数を適切に理解していないと確信しています。

私は root 権限が有効になっている管理者ユーザーです。HomeBrew、PIP、および Virtualenv を実行して、さまざまなプロジェクトの Python パッケージと仮想環境を管理しています。

60秒ごとに次のことをしたいと思います:

$ source /.virtualenvs/myenvironment/bin/activate
$ cd ~/desktop/python/
$ python myscript.py
$ deactivate  

私が試してみました:

(a) Launchd 用に独自の plist を作成しました。これらのドキュメントは適切に構成されていると思います。

(b) Launchd デーモンとエージェントを管理するプログラム (Launch Control と Lingon の両方)。

(c) 単純に crontab を編集してみました (sudo コマンドを使用した場合のみ可能です)。

コマンドで動作する python スクリプトは、オンライン ソースからデータを取得し、それを sqlite テーブルに格納します。sqlite db が変更されていないため、cron が実行されていないことがわかります。

どんな考えでも大歓迎です。

4

3 に答える 3

4

あなたは launchd と cron で何を試したか正確には言いませんが、どちらも正しく使用していなかったに違いありません。どちらも、一連のシェル コマンドではなく、単一の分離されたコマンド (/programs) を実行することを目的としています。単一の cron ジョブまたは launchd アイテムでこれを行うことは可能ですが、面倒です。最も簡単な方法は、必要なシーケンスを実行するシェル スクリプトを作成し (必ず最初にシバンを含め、スクリプトで実行権限を有効にしてくださいchmod +x /path/to/script)、それを cron または launchd から実行することです。

#!/bin/bash
source /.virtualenvs/myenvironment/bin/activate
cd ~/desktop/python/
python myscript.py
deactivate

Automator を使用してコマンド シーケンスをラップすることはお勧めしません。これは GUI ベースのスクリプト用に設計されており、バックグラウンドのみのジョブでは正しく機能しない可能性があります。

于 2013-07-08T00:16:12.107 に答える
2

私はこれとまったく同じ問題を抱えており、最近解決しました。私が行った手順については、こちらをご覧ください。基本的に、PATH だけでなく、PYTHONPATH を必要とするシェルを扱います。

于 2013-07-16T22:30:59.090 に答える
0

そのため、Launchd や Crontab が機能するように構成できない理由はまだわかりません。環境変数に関係しているのではないかと思います。

他の誰かがこの問題で苦労している場合は、実行したいシェル スクリプトを実行する Automator アプリケーションを作成し、Lingon または Launch Control を使用して、任意の頻度で Automator アプリケーション ファイルを実行することをお勧めします。

于 2013-07-08T00:02:13.557 に答える