定期実行Pythonプログラムを一定の間隔や定時のスケジュールで実行するには、大きく分けて以下の2つの方法があります。True:の無限ループの中で時間や時刻を毎回チェックして、定期的に処理を実行する方法です。時間や時刻のチェックは「scheduleモジュール」を利用すると簡単に実装できます。方法2の代表的なツールは、Windowsの「タスクスケジューラ」とmacOS/Linuxの「cron」です。test.py)を実行します。どちらを使うかは迷うところですが継続して定期実行する場合は方法2が適しています。方法1は、Pythonプログラムを実行したままにする必要があるので、何らかの原因でPythonプログラムが止まってしまうとそこで定期実行は中断されます。方法2は、Pythonプログラムとは関係なくシステムが毎回Pythonプログラムを実行してくれるので、定期実行自体が中断されることはありません。方法1はプログラムで簡単に実装できるのに、方法2は「タスクスケジューラ」や「cron」の導入や設定がわかりづらいと感じることも多いです。そこで、今回はシンプルな事例を用いて、導入や設定の方法をわかりやすく説明してみました。OS(今回はUbuntu)」を稼働させて、「cron」で定期実行する方法を説明します。安定した状態で定期実行を継続するには、電源や回線の維持管理を考えるとリモートのサーバーが必要になってきます。そこで、今回は実際の運用を想定してリモートのサーバーを最初から使います。22.04」のサーバーを利用します。今回はVPS(仮想専用サーバー)を利用して最低限Pythonを動かせるサーバーを構築します。サーバーと言っても一般的なWebサーバーのようにいくつものソフトウェアを連携させるシステムを組むので...Gammasoft.jp2024-02-04なお、自分のパソコンで試すことも可能です。2)」により簡単にWindows10/11にインストールできます。「cron」はmacOSに標準で組み込まれていますので、いきなりVPSでは敷居が高いと感じる場合は、自分のWindowsやmacOSでまず試してみてください。今回は自分のGmailアドレスにメールを送信するプログラムをサーバーで定時実行します。以下のコードのmy_addrとmy_passを自分の情報に書き換えて使用します。「Gmailのアプリパスワード」は、2段階認証を有効にすると取得できます(取得方法はこちらを参考にしてください)。main()まずは自分のパソコンで実行してみます。以下のように自分あてにメールが届き、本文に「実行時の時刻」が書き込まれているのを確認します。サーバーにプログラムをアップロード「scpコマンド」や「ファイル転送ソフト」を用いて、サーバーに上記のcron_test_mail.pyをアップロードします。今回はファイルが1つだけなので、以下のscpコマンドを使います(コマンドの使い方はこちらの記事を参考にしてください)。ユーザー名@サーバーのIPアドレス:~/サーバーでプログラムを実行してみるサーバーでもプログラムが問題なく実行できるか確認します。SSHでサーバーにログインして、以下のコマンドを実行します。cron_test_mail.py以下のようにサーバーで実行しても、自分のGmailアドレスにメールが届いているのを確認します。table)」と呼ばれるスケジュール表のファイルで指定します。cronは、このファイルを見つけると中に書き込まれているスケジュールを実行します。crontabファイルを編集や表示するには、以下のようにcrontabコマンドを用います。定期実行は、crontabファイルがあれば自動でcronが読み込んで行ってくれるので、まずcrontabファイルを作成します。-rで一度削除してから新規に作成します。場合は、以下のようにエディタ(editor)を選択するメッセージが表示されるので、Enterを押してデフォルトのnano(1)を選択します。すると「空のcrontabファイル」が編集用に作成されてスケジュールを入力できるようになります。今回はcron_test_mail.pyを2分毎に実行したいので、以下のスケジュールを書き込みます(書き方は後ほど説明します)。「変更されたバッファを保存しますか?」と表示されるので、Yを入力して保存します。これでcrontabファイルが保存されてすぐに定期実行が開始されます。以下のように2分毎に自分あてにメールが送信されます。正確に2分毎に定期実行されているのを、メールの本文に書き込んだ時刻から確認できます。スケジュールの設定方法(crontabファイルの書き方)crontabファイルには、以下のフォーマットでスケジュールを書き込みます。5つのフィールドは、すべて「整数」で入力します。曜日は0から6で指定します(0が日曜日です)。以下のように記号を用いて範囲やステップを指定することもできます。コメントアウトを意味する(コメントアウトされた部分は無視される)設定例cronの使い方で、最もわかりづらいのがスケジュールの設定方法です。1〜5つ目のフィールドを*にすると「毎分」、2〜5つ目のフィールドを*にすると「毎時」、3〜5つ目のフィールドを*にすると「毎日」になります。日時を指定1〜4つ目のフィールドで、月日と時刻を指定します。曜日を表す5つ目のフィールドは*にしておきます。曜日を指定5つ目のフィールドで曜日を指定します。「毎週何曜日」と指定するには、月日を表す3つ目と4つ目のフィールドを*にします。-rを実行するとcrontabファイルが削除されるので、定期実行も停止します。-eでcrontabファイルをあらたに作成する必要があります。再開するときは、行の先頭の#を削除してコメントアウトを解除し上書き保存すれば、すぐにまた定期実行が開始されます。2>&1を付け加えるとcron_test_mail.logにprint()とエラーの出力を記録できます。2>&1ここで、>>は「リダイレクト」と呼ばれ[左側のコマンドの出力]を[右側のファイル]に保存します。>>の「追記モード」と>の「上書きモード」の2種類があります。それぞれ、ファイルが存在しない場合は新規に作成されますが、ファイルが存在する場合はそれぞれ「下に追記」または「上書き」で保存します。今回は、定期実行を継続するので「追記モード」にしています。「上書きモード」にすると直近のエラーしかログに残りません。末尾に2>&1を付けることで、print()とエラーによる出力の両方を1つのファイルに保存できます。どちらかだけや別々に保存したい場合は、以下のように入力します。test_err.logcrontabファイルの内容をテキストファイルから読み込む方法テキストファイルにcrontabファイルの内容を書き込んでおき、以下のようにcrontabコマンドの引数にファイル名を指定して読み込むこともできます。-lで表示して確認できます。nanoの画面で編集しなくて済み、テキストファイルで管理できるので、スケジュールの差し替えなども便利にできます。cronのステータスを確認する通常cronは最初から起動していますが、どうしてもうまく定期実行が開始されないような場合には、以下のコマンドでcronの稼働状況(ステータス)を確認してみてください。(running)」と表示されればcronは起動しています。(dead)」と表示される場合は、停止してしまっているので、以下のコマンドで「起動」します。cron最後に今回はcronを利用したPythonプログラムの定期実行の方法を説明しました。True:で実装する方法も簡単で便利ですが、今回の方法ならばプログラムを改良しないでそのまま実行できます。プログラムとは別のツールから実行されるので、プログラムと一緒に定期実行も停止してしまう心配がありません。定期実行を安定して継続するのに適した方法です。Pythonプログラムの定期実行ができるようになると以下の記事にもあるように自動化できることの幅がグッとひろがります。チャレンジしてみてください!サーバーでPythonを動かすと「本当の自動化」ができるPythonでエクセルやWebを自動化できると仕事はかなり省力化できます。UnlimitedでPythonを学習する3つのコツ仕事自動化におすすめの本Pythonの初歩からステップを踏みながら仕事自動化のプログラミングを学べます。弊社の中嶋が執筆しました。手書きのためのコード用ノート手書きでコーティングするためのノートをアマゾンで販売しています。ガンマソフト株式会社ガンマソフトについてお問い合わせ利用規約プライバシーポリシ。