2016-07-22 27 views
4

を使用するPythonスクリプトがあり、pip install zmqでこのライブラリをインストールしました。コマンドラインから手動で呼び出すとプログラムを正常に実行できます。しかし、systemdユニットでスクリプトを呼び出そうとすると、systemctl status myservice.serviceImportError: No module named zmqと表示されます。システムでPythonスクリプトを実行すると、モジュールがロードされない

マイサービスファイルは、次のようになりますrunpythonscript.shはルートとしての私のPythonスクリプトを実行し、非常に単純なシェルスクリプトです

[Unit] 
Description=Does Something 

[Service] 
Type=simple 
ExecStart=/bin/sh /var/lib/project/runpythonscript.sh 
Restart=always 

[Install] 
Alias=myservice.service 

。このシェルスクリプトをコマンドラインから手動で実行すると、Pythonプログラムは完全に正常に動作しますが、サービス呼び出しによってzmqモジュールが見つからないようになります。

何か助けていただければ幸いです。

答えて

5

systemdラン。 pip経由でインストールされたモジュールは、システム用ではなくユーザー用にインストールされているため、root特権なしでモジュールをインストールすると、root用モジュールにアクセスできなくなります。

これを解決するために、私はsudo -H pip install zmqsudo -H pip3 install zmqを実行して、Python 2.7とPython 3+の両方のroot用パッケージをインストールしました。これにより、Pythonスクリプトの実行を試みると、systemdはモジュールにアクセスできました。

2

最も可能性の高い説明は、スクリプトがsystemdによって実行されているときに設定されていない環境変数がいくつか設定されていることです(例:PYTHONPATHの拡張?)。

環境パラメータ([0]参照)を試して、PYTHONPATH(およびこれに影響する可能性のあるもの)をコンソールセッションに設定してください。

[0]ルートとしてhttp://0pointer.de/public/systemd-man/systemd.exec.html#Environment=

+0

!この回答は結局、私のプロジェクトが何時間も働いていない回答を検索した後に働くことを助けました。 – dtgee

0

私の場合、私は "EnvironmentFile ="をユーザー.bash_profileに設定しました。問題は、.bash_profileの中で、私はのようなものを持っていたということでした。

export PYTHONPATH=.... 
export PATH=.... 

これはsystemdにして働いていなかったと私はそれを変更する必要がありました:ありがとう

PYTHONPATH=.... 
PATH=.... 
export PYTHONPATH PATH 
関連する問題