Anacondaの仮想環境で Python を Cronで実行 するには以下の手順を踏む必要があります。
① 仮想環境のアクティベート
② Pythonコマンド で Pythonの実行
ポイントは 最初に仮想環境 を アクティベートする という点です。
なお、Xserverの 管理者権限は不要 で実行できます。
また、仮想環境の構築方法は以下の記事をご参考ください。
ではいってみましょう。
1.Cronで実行するシェルスクリプトを書く
仮想環境のアクティベート と Pythonコマンド を実行するために、シェルスクリプトを用意します。
1 2 3 |
#!/bin/bash source /home/usr/anaconda3/bin/activate myenv python3 /home/usr/pyproject/test.py |
コードの解説
- シェル指定
#!/bin/bash
で スクリプトがbash
で実行 されることを指定。 - 仮想環境の有効化
source
コマンド で Anacondaの仮想環境myenv
をアクティブ化。 - Pythonスクリプトの実行 仮想環境内でPython 3を使い、
test.py
を実行。
こうすることにより 仮想環境をアクティベート した上で Python を実行できます。
2.シェルスクリプトに 実行権限 を付与する
先ほど作成したシェルスクリプト (ここでは script_name.sh という名前 にしています) に 実行権限を付与 します。
1 |
chmod +x script_name.sh |
3.改行コードを LF に変更する
改行コードが Windows形式 (CRLF
) になっているとエラーになります。Linuxでは Unix形式 (LF
) の改行コードを使用します。
VSCodeの場合、画面の右下に改行コードを設定する項目があります。変更して保存します。

4.Cron に登録する
Xserver のパネルから登録する場合
以下の画像のように コマンド に シェルスクリプトのパス を入力します。

Linuxのコマンドから登録する場合
以下のコマンドを実行します。
1 |
crontab -e |
表示された Cron の内容に以下を追加します。
1 |
* * * * * /home/usr/pyproject/test.sh |
想定されるエラー
Pythonのコードの中に 相対パス がある
Pythonのコードの中に 相対パス を書いている場合 エラーになる可能性が高いです。
たとえば、以下の Pythonコード を書いていたとします。
1 2 3 |
# 現在のディレクトリにあるファイルを読み込む簡単なコード with open('example.txt', 'r') as file: print(file.read()) |

このような場合に、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 ファイルの位置に変更します。
1 2 3 4 |
#!/bin/bash source /home/usr/anaconda3/bin/activate myenv cd /home/usr/pyproject # これを追加!! python3 /home/usr/pyproject/test.py |
実行結果

中身が読み取れている ことが分かります。
おわりに
今回は、Anaconda の仮想環境で Python を Cron で実行する方法をご紹介しました。
最後にポイントをまとめます。
- シェルスクリプトで 仮想環境を指定 (今回は myenv を指定)
- シェルスクリプトの中で cd を使って 基準の位置を変更 する
是非ご参考にしてください。
ではまた。
コメント