【Python】Anacondaの仮想環境でPythonをCronから実行する方法

Python

Anacondaの仮想環境で Python を Cronで実行 するには以下の手順を踏む必要があります。

① 仮想環境のアクティベート 

② Pythonコマンド で Pythonの実行

ポイントは 最初に仮想環境 を アクティベートする という点です。

なお、Xserverの 管理者権限は不要 で実行できます。

また、仮想環境の構築方法は以下の記事をご参考ください。

ではいってみましょう。

1.Cronで実行するシェルスクリプトを書く

仮想環境のアクティベート と Pythonコマンド を実行するために、シェルスクリプトを用意します。

コードの解説
  • シェル指定 #!/bin/bash で スクリプトが bashで実行 されることを指定。
  • 仮想環境の有効化 sourceコマンド で Anacondaの仮想環境 myenv をアクティブ化。
  • Pythonスクリプトの実行 仮想環境内でPython 3を使い、test.pyを実行。

こうすることにより 仮想環境をアクティベート した上で Python を実行できます。

2.シェルスクリプトに 実行権限 を付与する

先ほど作成したシェルスクリプト (ここでは script_name.sh という名前 にしています) に 実行権限を付与 します。

3.改行コードを LF に変更する

改行コードが Windows形式 (CRLF) になっているとエラーになります。Linuxでは Unix形式 (LF) の改行コードを使用します。

VSCodeの場合、画面の右下に改行コードを設定する項目があります。変更して保存します。

4.Cron に登録する

Xserver のパネルから登録する場合

以下の画像のように コマンド に シェルスクリプトのパス を入力します。

Linuxのコマンドから登録する場合

以下のコマンドを実行します。

表示された Cron の内容に以下を追加します。

想定されるエラー

Pythonのコードの中に 相対パス がある

Pythonのコードの中に 相対パス を書いている場合 エラーになる可能性が高いです。

たとえば、以下の Pythonコード を書いていたとします。

ファイル構成

このような場合に、Cron から実行すると エラーとなります。

なぜエラーとなるのか?

Cron で実行した場合 /home/usr が基準の位置になる からです。

この場合 /home/usr/example.txt を探しに行ってしまうのです。

しかし、実際には /home/usr/pyproject/example.txt にあります。

よって以下のエラーが出るのです。

# エラー
FileNotFoundError: [Errno 2] No such file or directory: ‘example.txt’

どうすればいいか

もちろん、絶対パスで書き直す といいですが、現実的ではないと思います。

ですので、 cd をつかって、基準の位置を python ファイルの位置に変更します。

実行結果

中身が読み取れている ことが分かります。

おわりに

今回は、Anaconda の仮想環境で Python を Cron で実行する方法をご紹介しました。

最後にポイントをまとめます。

ポイント
  • シェルスクリプトで 仮想環境を指定 (今回は myenv を指定)
  • シェルスクリプトの中で cd を使って 基準の位置を変更 する

是非ご参考にしてください。

ではまた。

コメント