CronでPhythonを自動化しようとして動作しなくてやったこと
CronによるPythonの自動化
PythonでスクレイピングとかTwitter自動化の手法とかを学ぶと、次にやりたくなるのはある一定の時間になるとプログラムを起動させて作業を行うPythonの自動化ですね。先日トライしてみたのですが、最初すごくとまどったのでここにまとめてみました。
結論からいうとcronでPythonを動かした場合、結果をターミナルにはかないということだけだったのですが、それは後々述べていきます。
Cron設定まず動くか試してみよう!
まずCronの設定ですが、普通どおりだとvimがエディターになっていて使いにくのでnanoを標準のエディターにします(*)。
$ nano ~/.bash_profile
とうちnanoが起動したら
ファイルの末尾に
export EDITOR=nano
といれCtl+Xを押してnanoを終了。
セーブしてくるか聞いてくるのでYとして終了します。このあとログインし直すか、
source ~/.bash_profile
とて設定を反映させましょう。
さていよいよ次はcronの編集です。
ターミナルで
$ crontab -e
とうちcronの設定画面を開きましょう。最初は何も記述されていないはずです。
次にやることはcronが動くかどうかのチェックですから簡単なコードを入れてみましょう。
これは毎分Hiとコンピューターにいわせるプログラムです
* * * * * /usr/bin/say "Hi."
これをいれてnanoを終了。cronがインストールされるはずです。
これでうまくいっていると毎分妙な男性の声でHiといわれるはずです。
マイクがミュートになっているのでなければ、これがうまく行かないとまずはmacの環境設定がうまく行っていないはずです。
詳しくは
の記述にあるとおりなのですが、とくに
フルディスクアクセスにcronを追加する
の部分が大切です。
これをやって、再度Hiといわれるか試してみてください。Hiといわれればcronは正常に動作しているはずです。
次にcronでpythonを動かしてみよう。
ここで重要なのがpython 及びpythonのプログラムファイルともに絶対パスで書いてあることです。
pythonの絶対パスはターミナルで
$ which python
とやれば出てきます。
またプログラムファイルの絶対パスですが、Finderでファイルを選んだ後右クリックしつつ、optionキーかaltキーを押すと相対パスがコピーできます。
さて自分がやった間違いはここからでした。
とcronを設定してみたのですが、うんともすんとも動きません。
よくよく調べてみると
Pythonのprint()メソッドは、ターミナル上に標準出力されません。
では、実際にどうやって出力を確認するのかというと、ターミナル上でmailコマンドを使って確認します。
とは言ったものの、mailコマンドで毎回確認するのは不便すぎるので、『標準出力』と『エラーメッセージ』を一緒に『logファイル』として出力する方法があります
ということでした。たんに出力先を
> 出力先
の形でcronのコマンドの末尾に加えればよいだけでしたので
として保存
するとセーブしてから一分後ログが吐き出されていました。
これで大体完成です。
あとはcroncの書き方のおさらい
(分)(時)(日)(月)(曜日) コマンド
のように書きます。
曜日は月から土が1−6、日曜が7か0
分数表示は例えば
*/5 * * * * /usr/bin/say "Hi."
は五分ごとにHiというコマンドになります。
最後に自分はjupyter notebookで作業することが多いのですが、このnotebookファイル(例えばXXX.ipynb)を.pyファイルに変更するのに便利なコマンドはターミナルで以下のようになります
jupyter nbconvert --to python XXX.ipynb
応用例の紹介
これを利用してtwitterの自動投稿などが可能になってきます。
自分はCell誌の新しい記事を自動的に取得してtweetとして投稿するボットを作っています。
また一日一回の英語単語復習ツィートの自動化
や
これだけできればスピーキングはOKになる英作文の練習ツィートの自動化
なども行っています。
こちらもよろしくおねがいします!
(*)vimに慣れている方はそのままでよいとおもいます。
この記事が気に入ったらサポートをしてみませんか?