【crontab】Linuxで定期的にタスクを自動実行する方法
はい、hebiです。
Linuxで定期的にタスクを実行する方法を記事にしたいと思います。
Windowsにはタスクスケジューラというツールでexeやバッチを定期的に実行する設定ができますが、Linuxでは画面からポチポチと設定を行うことはできません。
ですが、crontabというツールを使ってタスクを実行することができます。
crontabとは
cronのジョブスケジュールを管理するためのツールです。
crontabコマンドを使用して、cronにジョブのスケジュールを指示します。crontabは、特定のユーザーのジョブのスケジュールを管理し、cronが設定に応じて実行します。
- cronとは?
-
UnixおよびUnix系オペレーティングシステムで実行されるデーモンプロセスです。cronは、予め設定されたスケジュールに基づいてジョブを実行します。cronは、ユーザーが指定した時間に定期的に実行するジョブを制御します。
前提
以下の記事で作成したプロジェクトを使って説明していきます。
ライブラリによる違いはあると思いますが、他のライブラリも同じ流れになると思います。
タスク実行手順
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」を指定することでコマンドを実行できます。
crontabの設定
以下のコマンドを実行してcrontabを開きます。
export EDITOR=nano
crontab -e
crontabに以下を書き込んで保存します。
0 8 * * * cd /var/www/html/my_codeigniter_project && php spark command:test
上記の設定は毎朝8時にタスクを実行する設定です。
以上で設定完了です。
crontabは設定後特に再起動等不要で瞬時に適用されます。
これで朝8時になるとTestCommandクラスのrun関数が実行されます。
実行確認
朝8時まで待つのは時間がかかるので、手動で実行できることを確認してみます。
cd /var/www/html/my_codeigniter_project
sudo php spark command:test
run関数内で指定したsuccessfullyの文字が表示されたら成功です!
最後に
いかがだったでしょうか。タスクを実行することはできましたでしょうか?
cronは良く使う機能だと思いますので、ぜひ習得していただければと思います!
最後までお読みいただきありがとうございました(^^♪