サーバーマシンをUbuntu 16.04にアップグレードした後、cronで開始されたすべてのpythonプログラムは、 'import pyodbc'ステートメントで失敗します。通常、そのパッケージをインストールしました
pip3 install pyodbc
命令'import pyodbc'
のみを含む単純なプログラムを作成する場合、コマンドラインから実行すると機能します。
$ python3 /home/test.py
$
同じプログラムをcronから実行するように指示しました(ここにcrontabの関連部分があります):
$ crontab –l
0,5,10,15,20,25,30,35,40,45,50,55 8,10,12-18 * * * python3 /home/test.py 1>>/var/log/python3.log
それから、ログファイルで、私は得る:
Traceback (most recent call last):
File "/home/test.py", line 1, in <module>
import pyodbc
ImportError: No module named 'pyodbc'
「メイン」cronまたはユーザーcrontabから実行した場合の結果は同じです。問題を解決するにはどうすればよいですか?
わかりました。JacobVlijmの提案のおかげで、解決策がようやくわかりました。パッケージ 'pyodbc
'はuser1(/home/user1/.local/lib/python3.5/site-packages/
)の下にインストールされていました。端末にuser1としてログインすると、プログラムはモジュールを見つけることができます。 cron
を使用して、通常は別のユーザー(user2
)の下でプログラムを実行します。
それが問題でした。 user1を介してcronで実行すると、すべて問題ありませんでした。最後に調査する質問は、コマンド 'pip3 install pyodbc==3.0.10
'がパッケージをすべてのユーザーではなくuser1で使用できるようにした理由です。
さて、あなたのプログラムをこのようにしてください
#!/usr/bin/env python3
import pyodbc
次のような実行権限を付与します
chmod +x filename.py
そして今、cronを追加して見てみましょう。