プログラミング

【crontab】Linuxで定期的にタスクを自動実行する方法

hebishima.shogo

はい、hebiです。

Linuxで定期的にタスクを実行する方法を記事にしたいと思います。

Windowsにはタスクスケジューラというツールでexeやバッチを定期的に実行する設定ができますが、Linuxでは画面からポチポチと設定を行うことはできません。

ですが、crontabというツールを使ってタスクを実行することができます。

スポンサーリンク

crontabとは

cronのジョブスケジュールを管理するためのツールです。

crontabコマンドを使用して、cronにジョブのスケジュールを指示します。crontabは、特定のユーザーのジョブのスケジュールを管理し、cronが設定に応じて実行します。

Q
cronとは?

UnixおよびUnix系オペレーティングシステムで実行されるデーモンプロセスです。cronは、予め設定されたスケジュールに基づいてジョブを実行します。cronは、ユーザーが指定した時間に定期的に実行するジョブを制御します。

前提

以下の記事で作成したプロジェクトを使って説明していきます。

ライブラリによる違いはあると思いますが、他のライブラリも同じ流れになると思います。

あわせて読みたい
【PHP】CodeIgniter4のインストール方法
【PHP】CodeIgniter4のインストール方法

タスク実行手順

cronがタスクを実行するまでの手順を説明します。

cronパッケージをインストール

以下のコマンドでcronパッケージをインストールします。

sudo yum install cronie

インストールが完了したら、cronを起動し、システム起動時に自動的に起動するように設定します。

sudo systemctl start crond
sudo systemctl enable crond

タスク作成

cronが実行するタスクとなるTestCommandクラスを作成します。

<?php

namespace App\Commands;

use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;

class TestCommand extends BaseCommand
{
    protected $group       = 'CustomCommands';
    protected $name        = 'command:test';
    protected $description = 'test';

    public function run(array $params)
    {
        CLI::write('successfully.', 'green');
        // CLI::error('error');
    }
}

$nameに指定した「command:test」を指定することでコマンドを実行できます。

「app/commands」フォルダ内に作成してください。
フォルダ名を間違えると実行できません。

commandsのs付け忘れており、なぜ実行できない!?となりました、、、

crontabの設定

以下のコマンドを実行してcrontabを開きます。

export EDITOR=nano
crontab -e

crontabに以下を書き込んで保存します。

0 8 * * * cd /var/www/html/my_codeigniter_project && php spark command:test

上記の設定は毎朝8時にタスクを実行する設定です。

「* * * * *」は分単位、時、日、月、曜日を表しています。

曜日には以下が入ります。

  • 0(日曜日)
  • 1(月曜日)
  • 2(火曜日)
  • 3(水曜日)
  • 4(木曜日)
  • 5(金曜日)
  • 6(土曜日)

例えば、* * * * 1 は、毎週月曜日に実行することを意味します。

以上で設定完了です。

crontabは設定後特に再起動等不要で瞬時に適用されます。

これで朝8時になるとTestCommandクラスのrun関数が実行されます。

実行確認

朝8時まで待つのは時間がかかるので、手動で実行できることを確認してみます。

cd /var/www/html/my_codeigniter_project
sudo php spark command:test

run関数内で指定したsuccessfullyの文字が表示されたら成功です!

最後に

いかがだったでしょうか。タスクを実行することはできましたでしょうか?

cronは良く使う機能だと思いますので、ぜひ習得していただければと思います!

最後までお読みいただきありがとうございました(^^♪

スポンサーリンク
ABOUT ME
hebi
hebi
エンジニア
フルスタックエンジニアとして活躍中。
HTML5プロフェッショナル認定Level1、Level2所持者です。

未経験の方でも簡単にプログラミングを学べるようにと情報を発信しております。
記事URLをコピーしました