vagrant環境(ubuntu18)でcronを利用してPythonを定期実行してみる

 Pythonでクローラー作ってデータ収集なんかをしていると、手動で毎回クローラーを走らせると面倒なので自動で定期的に実行したくなりますよね。

 そんな自動での定期実行をやってくれるのがcronなのですが、今回はvagrant環境でcronの設定をする方法を紹介してみたいと思います。

環境

 環境は下記の通り。

今回の環境

  • Vagrant 2.2.3
  • Homestead(Ubuntu 18.04.1 LTS)
  • Python 3.6.4

crontab確認

 まずは、下記コマンド「crontab -l」でcronのリストを確認します。

$ crontab -l
no crontab for vagrant

 今回は上記の通り、crontabはない状態です。

crontab削除

 なお、何か既に設定されていて削除したい場合は、下記コマンドで削除することができます。

$ crontab -r

 ただし、-rオプションはcrontabの設定全てを削除してしまうので扱う際は十分に注意してください。

cron設定ファイルの確認

 では、まずcronに関するファイルを確認してみます。

 cronに関するディレクトリやファイルはubuntuの場合、「/etc/」ディレクトリ内にあります。

├── cron.d
├── cron.daily
├── cron.hourly
├── cron.monthly
├── cron.weekly

cron.dにファイルを作成する

 ubuntuでは、上記のリストの中にあるcron.dの配下に拡張子のない設定ファイルを作成することでcronを実行することができるので、下記のようにコピーして「mycron」と命名したいと思います。

sudo cp /etc/crontab /etc/cron.d/mycron

 問題なく作成できているか確認しておきます。

$ ls /etc/cron.d/ | grep "mycron"
mycron

Pythonファイル作成

 続いて定期的に実行したいプログラムファイルを作成します。今回は適当に現在時刻を取得して、その時刻をテキストファイルに書き込むだけのシンプルなPythonファイルを「test.py」と命名して作成してみたいと思います。保存場所は適宜環境に合わせて決めてください。

from datetime import datetime
now = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
file = open('/home/vagrant/code/test.txt', 'w')
file.write(now)
file.close()

Shellファイルの作成

 次に上で作成したPythonファイルを実行するためのシェルファイルを作成します。今回は「cron.sh」というファイル名で作成したいと思います。なお、こちらのファイルも適宜、環境に合わせて好きな場所に作成してください。

$ sudo vi cron.sh

 今回は下記のようにpythonを実行するようにします。

#!/bin/bash
  
cd ~/code/python/
python test.py

Cronファイルを編集

 続いて、さきほど作成したmycronファイルを編集していきます。

 適当にviコマンドかなんかでファイルを開いて、

sudo vi /etc/cron.d/mycron

 下記のコードを記述してみたいと思います。

*/1 *   * * *   vagrant /bin/bash /home/vagrant/code/cron.sh

 今回は上記のように1分間隔でvagrantというユーザー名義でcron.shファイルを実行するようにします。

cronログの設定を変更

 これで基本的に一通りcronの定期実行は可能なのですが、ついでにcronのログを出すように設定します。

 ubuntuの場合、初期設定ではcronのログが出力されないようになっているので、ログを出力するように「/etc/rsyslog.d/50-default.conf」ファイルを編集します。

$ sudo vi /etc/rsyslog.d/50-default.conf

 ファイルを開くと下記のコードがコメントアウトされていると思うので、コメントアウト解除します。

cron.*

 コメントアウトを外したら保存して、下記で再起動します。

sudo service rsyslog restart

cronの再起動

 最後にcronの再起動をして完了です。

sudo service cron restart

まとめ

 ということで、今回はvagrant環境にてcronを利用してPythonプログラムを定期実行する方法を簡単に紹介してみました。

 今回紹介した方法以外にもcrontabを利用して定期実行する方法もありますが、今回紹介した方法の方がより安全に管理できるかと思います。

 てことで、今回はここまで!また!

お仕事のご相談・ご依頼
お気軽にお問い合わせください!

お仕事の依頼はこちら

シェアありがとうございます!

タグ
cron Python

著者プロフィール

Taka

東京、奄美大島を拠点にサーフィンとスノーボードが好きなフリーランスのWebクリエイターです。普段はプログラム書いたりデザインしたり映像作ったりしています。いろいろな人の話しを聞くのが好きなので、このブログを通して多くの人と繋がりが出来たら嬉しいです。noteとInstagramもやっているのでフォローしてくれたらありがたいです!

人気記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です