こんにちは、フルスタックエンジニアのryuです。
今回の記事では、crontabの設定方法について解説します。crontabとは、定期的にジョブを実行するためのものです。crontabに実行間隔や実行ユーザーを記述することで、定期的にジョブが実行されます。今回はcrontabの設定方法を詳しく解説します!
目次
crontabの設定方法を解説
crontabってどうやって使うの?
今回の記事では、crontabの使い方について解説します。
システム運用を行う際、バックアップやログファイルの削除など定期的にプログラムを実行させる必要があります。そのような場合、crontabに設定するだけで定期的にジョブを実行することができます。
今回は、crontabで定期的にジョブを実行させる方法を詳しく解説します。内容は以下の通りです。
- crontabファイルの設定
- crontabファイルの書き方
- ユーザーのcrontab
では、crontabの設定をしていきましょう!
crontabにジョブを設定する
まずはcrontabにジョブを設定します。vimを使用してcrontabを開きましょう。
vi /etc/crontab
crontabのファイルは以下のようになっています。実行時間と実行ユーザー、実行コマンドが設定されています。
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
ではcrontab、簡単な設定をしてみましょう。
1 * * * * root /usr/bin/echo "test"
これで1分毎にechoコマンドを実行するようになります。コマンドを指定する際は、絶対パスで指定するようにしましょう。コマンドの絶対パスを調べるためには、whichコマンドを使用しましょう。
which echo
whichコマンドの使い方はこちらの記事で詳しく解説しています。
【Linux】whichコマンドを使用してコマンドの絶対パスを表示する【オプションなども併せて解説】
crontabファイルの書き方
先ほど簡単なコマンドをcrontabに設定しました。crontabの書き方は以下の通りです。
分 時 日 月 曜日 ユーザー コマンド
crontabの各フィールドの設定値はこちらです。
分 | 0から59までの整数 |
時 | 0から23までの整数 |
日 | 1から31までの整数 |
月 | 1から12もしくは、jan~decまでの文字列 |
曜日 | 0から7まで(0、7→日曜日 6→土曜日) もしくはSun,Monの文字列 |
ユーザー | 実行するユーザー |
コマンド | 実行するコマンド |
crontabの実例①
この例では、毎日午前3時に/var/log/myapp.log
ファイルを/backup/
ディレクトリにバックアップするための設定です。
0 3 * * * cp /var/log/myapp.log /backup/
この設定は、分(0
), 時(3
), 日(*
), 月(*
), 曜日(*
)の各フィールドを指定しています。これにより、毎日午前3時にコマンドが実行され、ログファイルがバックアップされます。
crontabの実例②
この設定は、月曜から金曜の午後9時に指定したバッチスクリプトを実行します。
0 21 * * 1-5 /path/to/batch_script.sh
crontabの実例③
この設定は、毎週月曜日の午前2時に指定したデータベースをエクスポートしてSQLファイルとして保存します。
0 2 * * 1 mysqldump -u username -p password dbname > /backup/db_backup_$(date +\%Y\%m\%d\%H\%M\%S).sql
時間ごとに実行されるcronファイル
先ほどは/etc/crontabファイルに実行時間を設定しましたが、時間ごとに実行されるディレクトリがあります。
それは、”/etc/cron.*”のディレクトリです。このディレクトリ内部にスクリプトを作成すると、時間ごとにスクリプトが実行されます。
/etc/cron.hourly/ | 1時間ごとに1度実行されるcronジョブを記述したファイルを収めたディレクトリ |
/etc/cron.daily/ | 一日ごとに1度実行されるcronジョブを記述したファイルを収めたディレクトリ |
/etc/cron.weekly/ | 1週間ごとに1度実行されるcronジョブを記述したファイルを収めたディレクトリ |
/etc/cron.montyly/ | 月に一度に1度実行されるcronジョブを記述したファイルを収めたディレクトリ |
すでにデフォルトでいくつかのスクリプトが、cronディレクトリ配下にあるので参考にしてください。
ユーザーのcrontabの設定方法
先ほど設定した”/etc/crontab”ファイルはシステムのジョブを実行させます。crontabには、システム用途は別にユーザー毎で設定することが可能です。
ユーザーのcrontabファイルを作成する
ユーザーのcrontabは直接編集するのではなく、crontabコマンドを使用します。まずは、crontabコマンドを使用して、ユーザーのcrontabを作成してみましょう。
login user //ユーザーでログイン
crontab -e
コマンドを実行すると、ファイルを編集するエディタを聞かれるので、どちらかを選択しましょう。オススメはvimです。
ファイルを以下のように編集します。書式は先ほどと同じですが、実行ユーザーを書く必要はありません。
1 * * * * /usr/bin/echo "test"
これで設定が完了です!
crontabコマンドのその他のオプション
設定したcrontabは”-l”オプションを使用すると、設定されているcronジョブを一覧表示できます。
crontab -l
→1 * * * * /usr/bin/echo "test"
“-r”オプションを使用すると、設定されている全てのcronジョブが削除されます。
crontab -r
crontabを設定するメリット
crontabを設定するメリットには、様々なものがあります。
自動化による効率化
crontabを使用することで、定期的なタスクやバッチ処理を自動的に実行することができます。これにより、人間の介入なしで作業を進めることが可能です。
自動化によって、繰り返し行う作業を効率的に処理できます。手動で同じ作業をする手間を省くことができます。
ミスの削減
crontabに設定されたタスクは、指定されたタイミングで正確に実行されます。これにより、人為的なミスを減少させることができます。
柔軟なスケジューリング
crontabの構文により、非常に柔軟なスケジューリングが可能です。特定の日付や時刻、週ごと、月ごとなど、さまざまなタイミングでジョブを実行できます。
実行タイミングを自由に決めることができるため、人が働いていない時間でもスクリプトやコマンドの実行が可能になります。
crontabにはこのようなメリットがあるのでぜひ活用してください!
crontabの設定方法まとめ
今回の記事では、crontabの設定方法を解説しました。まとめると以下のようになります。
- /etc/crontabファイルでコマンドと時刻を指定
- ユーザーのcrontabは”crontab -e”コマンドで編集
crontabはシステム運用をする人には必須の知識なので覚えておきましょう!
このようなインフラエンジニアに必要な知識を当ブログでは、紹介しているので興味のある方は是非ご覧ください。
さらにLinuxのコマンドの学習をしたい人に向けて、InfraAcademyというインフラ学習サービスのご紹介です。
「Linuxの実践的な内容を学習したい」、「コマンドを打ちながらLinuxを学習したい」
そのようなご要望にお応えして、Linuxやネットワークが学習できるサイト「InfraAcademy」をリリースしました!
InfraAcademyの特徴は以下の通り。
- Linuxやネットワークの知識が体系的に学べる
- LINEやZoomでエンジニアに質問可能
- 全ての講座が閲覧できて、2,480円
- 購入から1週間以内であれば全額返金
Linuxの参考書を購入すると、3,000円以上するものもあります。InfraAcademyでは、2,480円でコンテンツ見放題で現役エンジニアに質問できるサービスまで付いています。
また、購入から1週間以内であれば全額返金保証もあるので安心です。
InfraAcademyでは、一部のコンテンツは無料で閲覧できるので、興味のある方はお試しください。