Python3をcron実行しようとしたら動かなかったので、やり方を書き残しておきます。
- コードに日本語を含むとエラーになる
- Python3で実行されず、Python2.7で実行される
2つのエラーで実行できませんでしたが、無事解決できました。
参考サイト
cronを動かすのに参考にしたサイトはこちら。
そのため、記事中の「ターミナル上ではPython3が動いている」←この部分で引っかかっていました。
自分のターミナル上でPythonのバージョンを確認すると、Python2.7がインストールされていました。
MacにインストールされているPythonのバージョンを確認するには
ターミナルで
python --version
を実行すると確認できます。
Python3をMacで使用できるようにする
さて、macにpython3がインストールされていなかったので使えるようにする必要がありました。
下のサイトを参考にPython3をインストール&.bash_profile&.bashrcを設定
下記サイトで全部説明されていたのでこの通りに。
.bash_profile&.bashrcmの設定方法がわからなかったので追記しておきます。
.bashrcの設定
./bashrc設定画面に遷移
.bashrcを設定するには、ターミナルで
vi ~/.bashrc
と入力しエンターキーを押します。
./bashrcにコマンド入力
bashrcを編集できる画面になりました。この画面はviエディタという編集画面なので、馴染みがないコマンドを打つことになります。
i(アイ)ボタンを押すと文字を打てるようになります。
ここで画像の通り入力します。
alias python=python3
alias pip=pip3
./bashrcの編集を終える
./bashrcの編集を終えるには、「esc」キーを押してインサートモードを終了します。
次に、
:wq
と打ち込みます。(「:wq」は自動的に一番下の行に入力されます)
エンターキーを押すと、bashrcの設定を保存し元のターミナルの画面に戻ります。
.bash_profileの設定
.bash_profileの画面遷移、保存の方法は上のbashrcと同じです。
/.bash_profile設定画面に遷移
ターミナルで
vi ~/.bash_profile
を入力しエンターキーを押します。
/.bash_profileにコマンド入力
こちらもviエディタなので、「i」を打ってからコマンドを入力します。
source ~/.bashrc
とコマンドを入力しました。
bash_profileを保存して終了
「esc」を押して「:wq」と入力してエンターキーでターミナルに戻ります。
これで、macのデフォルトでpython3を使えるようになりました!
確認してみます
ちゃんとpython3.8.3になりました。
cronで動かしたpythonでは、version2.7を吐いてしまう
macのデフォルトではpython3を使えるようになりましたが、
cronで設定した”hello”でプリントすると、version2.7とプリントされてしまいます。
このトラブルも、下記サイトで解決しました。
Pythonをフルパスで指定したら出来た
cronの設定で「python」とだけ入力していました
上手くいかなかったコマンド
PATH=/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
LANG=ja_JP.UTF-8
41 0 * * * python /Users/user/Desktop/hello.py > /Users/user/Desktop/exec-error.log 2>&1
pythonをフルパス「/Library/Frameworks/Python.framework/Versions/3.8/bin/python3」と入力したらうまくいきました。
成功したコマンド
PATH=/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
LANG=ja_JP.UTF-8
48 0 * * * /Library/Frameworks/Python.framework/Versions/3.8/bin/python3 /Users/user/Desktop/hello.py > /Users/user/Desktop/exec-error.log 2>&1
日本語がプログラム中にあるとエラーが出る
cronにLANG=ja_JP.UTF-8と追記しましたが、エラーが出てしまっていました。
これはpythonの1行目に
# coding:UTF-8
と入力したら解決しました。
まとめ
参考にしたサイトはどれもとても分かりやすかったのですが、自分の設定と異なっていたのと知識がなく戸惑ってしまいました。
無事、cronでpython3を実行できるようになりました!