MacでPythonをcron実行するのにつまづいた話

Python3をcron実行しようとしたら動かなかったので、やり方を書き残しておきます。

  • コードに日本語を含むとエラーになる
  • Python3で実行されず、Python2.7で実行される

2つのエラーで実行できませんでしたが、無事解決できました。

目次

参考サイト

cronを動かすのに参考にしたサイトはこちら。

たぬハック
【保存版】cronでPython3を定時実行する方法&注意すべき4つのポイント こんにちは、ライフハックブロガーのたぬ(@tanuhack)です! 「作ったPythonのプログラムが、ある決まった時間に自動で実行されればなあ…」 Macのcron(クーロン)という機...

結論から言うと、私のMacではPython3をインストールしていなかったのでこの通りにはできませんでした。(いつもVSCode上のデバックで動かしていたので気づきませんでした)

そのため、記事中の「ターミナル上ではPython3が動いている」←この部分で引っかかっていました。

管理人みゆき

自分のターミナル上でPythonのバージョンを確認すると、Python2.7がインストールされていました。

MacにインストールされているPythonのバージョンを確認するには

ターミナルで

python --version

を実行すると確認できます。

Python3をMacで使用できるようにする

さて、macにpython3がインストールされていなかったので使えるようにする必要がありました。

下のサイトを参考にPython3をインストール&.bash_profile&.bashrcを設定

下記サイトで全部説明されていたのでこの通りに。

Tipstour - チップスツアー | 時短...
【Python3】MacにPythonの最新バージョンをインストールする手順まとめ【Mojave以前】 | Tipstour - チップ... 【追記】MacOS「Catalina」以降では、インストール手順が異なります。こちらの記事をどうぞ! 新しいMacにPython最新バージョンをインストールする方法まとめ【Catalina以...
管理人みゆき

.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を入力したところ

/.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とプリントされてしまいます。

このトラブルも、下記サイトで解決しました。

Tipstour - チップスツアー | 時短...
【Python3】Crontabを使ってMacでPythonを自動実行する設定方法と注意点まとめ【フルパス付き】 | Tipstour... この記事では、MacでPython3をCrontabを使って自動実行する設定方法と注意点について解説しています。CrontabではPythonのフルパスと実行ファイルのフルパスを指定する必要...

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を実行できるようになりました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次