cron
前回、ついにPythonでTwitterを制御するためのライブラリTweepyを使って特定の期間内のツイートをリツイートしてくれたユーザーに感謝ツイートをするプログラムが完成しました。

次にやることとしては、このプログラムを定期的に実行することです。
もちろん毎回手動で実行するというのも一つなのですが、今の状態ではパソコンの前にいるときにしか実行できません。
となるとなかなか定期的に実行するのも難しいわけです。
そこでこのアプリを”自動的に”定期的に実行したくなるというのが自然な流れでしょう。
今回はMac(もしくはLinux系PCならOK)を使って、作成したアプリの自動定期実行の設定を試してみようと思います。
使うのは「cron(クロン)」と呼ばれるプログラムのスケジュール管理機能です。
ということで始めていきましょう。
cronの設定
cronを設定するのは何かボタンがあって設定できるわけではありません。
前にも何度か出てきていますが、「ターミナル」と呼ばれるインターフェースを用います。
このターミナルというのは、マウスを使ってぽちぽちとボタンを押してアプリケーションを実行する「GUI(グラフィカルユーザーインターフェース)」とは異なり、コマンドを入力することでコンピュータを操作する「CUI(コマンドラインユーザーインターフェース)」と呼ばれるものです。
前に簡単な使い方を解説していますので、使ったことがない方はこちらの記事を参考にしてください。

また前にターミナルからPythonのプログラムを実行するということもしていますので、良かったらこちらの記事もご覧ください。

ということでターミナルを起動します。
私の環境では、「Launchpad」をクリック。

「その他」をクリック。

その中の「ターミナル」をクリックします。

するとこのようなウインドウが立ち上がります。

このウインドウに「crontab -e」と入力して、エンターキーを押します。
するとウインドウのタイトルが「ユーザー名 – vi crontab」に変わります。

ここに実行する時間、コマンドを打ち込んでいきます。
今回は「00 22 * * * /opt/anaconda3/bin/python /Users/ username / Desktop/twittertools/thankstweet_ver1.py」と入力しました。
最初の「00 22 * * *」ですが、これは「分 時 日 月 曜日」を示したコマンドになります。
分 | 時 | 日 | 月 | 曜日 | |
指定可能な数字 | 00 – 59 | 0 – 24 | 1 – 31 | 1 – 12 | 0 -7 |
補足 | 0: 日曜日 1: 月曜日 2: 火曜日 3: 水曜日 4: 木曜日 5: 金曜日 6: 土曜日 7: 日曜日 |
また「*」は全てを表しています。
つまり先ほどの「00 22 * * *」は全ての曜日、全ての月、全ての日で22時00分に実行するということになります。
そして続く「/opt/anaconda3/bin/python /Users/ username / Desktop/twittertools/thankstweet_ver1.py」が実行するプログラムのコマンドです。
今回のプログラムはpythonのプログラムなので、まずはpythonと入力し、その後ろに実行したいプログラムを絶対パスで入力します。
絶対パスとはファイルやフォルダの場所を全部書いたパスになります。
詳しくはこちらの記事で解説していますので、ご覧ください。

まずPythonの場所ですが、私と同様Anacondaを使われている方は「/opt/anaconda3/bin/python」だと思われます。
その後ろに半角のスペースを開けて実行したいPythonプログラムの絶対パスを記入してください。
終わったら保存して終了します。
すると「”ターミナル.app”がコンピュータを管理することを要求しています。…」というウインドウが出てきますので、「OK」をクリックします。

次にcronが自動で実行されるようセキュリティの設定をしましょう。
左上のアップルマークから、「システム環境設定」をクリックします。

「セキュリティとプライバシー」をクリック。

「プライバシー」タブの「フルディスクアクセス」をクリック。

左下の鍵マークをクリックして、パスワードを入力したのち、右側の「cron」にチェックを入れます。

これで設定は完了です。
時間まで待ってみたところ、ちゃんと実行され、ツイートされていました。

これで設定完了、めでたしめでたしといきたいところですが、なかなかそうもいきません。
cronではできないこと
実はこの自分のコンピュータでcronを設定してプログラムを定期実行するということには、あるハードルがあるのです。
そのハードルというのが、コンピュータが立ち上がっていて、スリープではないことです。
最近ではコンピュータを起動しっぱなしで電源を切らない人は多いですし、私もそうなのですが、スリープ状態にはしています。
となると結局はコンピュータの前にいてスリープモードを解除しないといけないわけです。
さてどうしたものかと、次回いくつかの解決策を考えてみたいと思います。

ではでは今回はこんな感じで。
コメント