※本記事には広告・アフィリエイトリンクが含まれます。収益はサイト運営・検証費用に充てています。
結論から言うと:
- cronを使えば、VPS上のPythonスクリプトを毎日決まった時刻に自動実行できる仕組みです
- crontabに1行書くだけで設定が完了するが、パスの指定ミスが最大の落とし穴になる
- ログファイルへの出力設定をセットで行うと、実行確認が格段に楽になる
cronとは
cronはLinuxに標準搭載されているジョブスケジューラです。「毎日15:30に実行」「平日だけ実行」といった条件をcrontabと呼ばれる設定ファイルに記述する仕組みです。率直に言うと、Python自動化との相性が非常によく、サーバーが起動していれば人手を介さずスクリプトが動き続けます。
crontabの書き方
crontabの書式は「分 時 日 月 曜日 コマンド」の6フィールドです。
# 分 時 日 月 曜日 コマンド
30 15 * * 1-5 /usr/bin/python3 /home/stock/fetch_stock.py
曜日は0=日曜、1=月曜、5=金曜です。「1-5」で平日のみ実行できる仕組みです。
Pythonスクリプトをcronに登録
crontabの編集は次のコマンドで行います。
crontab -e
初回は使用するエディタを聞かれます。nanoを選択するとわかりやすいです。
毎日15:30に実行する設定
タイムゾーンをAsia/Tokyoに設定済みの場合、以下の1行で平日15:30に自動実行されます。
30 15 * * 1-5 /usr/bin/python3 /home/stock/fetch_stock.py >> /home/stock/stock.log 2>&1
記述後、Ctrl+X → Y → Enterで保存します。
実行ログをファイルに保存
コマンド末尾の>> /home/stock/stock.log 2>&1が重要です。>>で追記、2>&1でエラーも同じファイルに書き込む仕組みです。ログ確認は次のコマンドで行います。
tail -f /home/stock/stock.log
cronが動いているか確認
cronサービスの状態は次のコマンドで確認できます。
systemctl status cron
「active (running)」と表示されていれば正常に動いている状態です。登録済みのジョブ一覧はcrontab -lで確認できます。
よくある失敗(パス問題)
cron実行時に「command not found」や「ModuleNotFoundError」が出る場合、コマンドのパスが間違っていることが多い原因です。Pythonのパスを確認する手順は次の通りです。
which python3
通常は/usr/bin/python3が返ります。crontabにはこのフルパスを記述します。pip3でインストールしたライブラリが見つからない場合は、スクリプト内でsys.pathを明示的に指定する方法も有効です。
筆者の検証メモ
ConoHa VPS(Ubuntu 22.04)でcronを設定した際、環境変数PATHがログインシェルと異なるため、スクリプト内でライブラリが見つからないエラーが出た。解決策として、crontabの先頭にPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binを追記したところ正常に動作した。
【投資免責事項】本記事で紹介するコードおよび分析結果は情報提供を目的としたものであり、特定の銘柄への投資を推奨するものではありません。投資判断はご自身の責任で行ってください。

