【完全版】crontabコマンドの書き方を実例付きで丁寧に解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年5月)

✔このような方へ向けて書かれた記事となります

「crontabコマンドの使い方が知りたい」

「crontabコマンドでは何ができるのだろうか?」

「crontabコマンドの実例が見たい。」

✔当記事を通じてお伝えすること

  • crontabコマンドの基本
  • crontabコマンドでできること
  • crontabコマンドの実例

当記事では、crontabコマンドの基本やその書き方はもちろん、crontabコマンドの実例をご紹介しています。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

crontabコマンドにおける基礎知識3選

crontabコマンドを使ううえでの基礎知識を解説します。

まずは簡単にでも目を通し、理解しておくことが大切です。

  • crontab コマンドとは?
  • なぜCrontabを知る必要があるか
  • crontab の利用シーン

crontab コマンドとは?

crontabコマンドは、Cronタスクを管理するためのコマンドラインツールです。

これを使ってタスクの追加、編集、削除、一覧表示などがおこなえます。

cronタスクについては、詳しくこちらで解説しています。

なぜCrontabを知る必要があるか

Crontabは、LinuxやUNIXベースのシステムで定期的なタスクを自動的に実行するための仕組みです。

サーバー管理や開発業務で定期的なメンテナンスやデータ処理など、自動化が求められるシーンが多く存在します。

Crontabを理解し使いこなせることで、効率的に作業を行えるようになります。

crontabの利用シーン

Crontabは様々なシーンで活用されます。

例えば、以下のようなものが挙げられます。

  • データベースの定期バックアップ
  • ログファイルのローテーション
  • システムのメンテナンス
  • 定期的なデータ処理や集計作業

cronの基本概念

cronの基本概念について見ていきます。

頻繁に出てくる用語などは、必ず理解しておきましょう。

  • クローンとは
  • システムワイドCrontabとユーザーCrontabの違い
  • クローンの構造
  • クローンファイル
  • crontab のフォーマット
  • 特殊文字とその意味

クローンとは

Cronとは、LinuxやUNIXベースのシステムで定期的に実行されるジョブのことを指します。

Cronタスクは、Cronデーモンと呼ばれるプログラムが管理して実行されます。

cronについての用語は詳しくこちらで解説しています。

システムワイドCrontabとユーザーCrontabの違い

システムワイドCrontabは、システム全体で共通のCronタスクを管理するもので、管理者権限が必要です。

一方、ユーザーCrontabは、個々のユーザーが管理するCronタスクで、各ユーザーが独自に設定できます。

クローンの構造

Cronタスクは以下の構造で定義されます。

* * * * * /path/to/command [args]

ここで、左から分、時、日、月、曜日を表し、それぞれに数値やワイルドカード(*)を設定できます。

クローンファイル

Cronタスクは、テキストファイルに記述して管理されます。

このファイルをクローンファイルと呼びます。

ファイルは種類により、それぞれ以下に保存されます。

  • システムワイドCrontabは `/etc/crontab
  • タスク`や`/etc/cron.d/`
  • ユーザーCrontabは`/var/spool/cron/crontabs/`

こちらは、/etc/crontabの例です。

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 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 のフォーマット

Crontabファイルのフォーマットは以下のようになります。

分 時 日 月 曜日 コマンド

それぞれのフィールドは空白文字で区切られ、数値やワイルドカード(*)、範囲(-)、リスト(,)を使用して設定できます。

特殊文字とその意味

Crontabでは以下の特殊文字が使用できます。

  • `*`:任意の値
  • `-`:範囲指定
  • `,`:複数値指定
  • `/`:間隔指定
  • `@reboot`:システム起動時に実行

こちらに一覧も用意しています。

crontabコマンドのインストールと環境設定

crontabコマンドのインストールや設定方法を見ていきます。

もしお持ちのPCで使えないのであれば、参考にしてください。

  • インストール方法
  • 環境設定

インストール方法

Crontabは多くのLinuxディストリビューションでデフォルトでインストールされています。

もしインストールされていない場合、以下のコマンドでインストールできます。

#Ubuntu/Debianの場合
sudo apt-get install cron
#CentOS/RHELの場合 
sudo yum install cronie 

環境設定

Crontabを使用する前に、環境変数`MAILTO`や`PATH`などを設定することが推奨されます。

これにより、Cronタスクの実行時に適切な設定が適用されるのです。

crontabコマンドの基本操作

crontabコマンドの基本的な使いかたはこちらです。

以下をマスターすれば、すぐに使えるようになります。

  • クローンファイルの作成
  • クローンファイルの編集
  • クローンファイルの一覧表示
  • クローンファイルの削除
  • crontabのバックアップとリストア

クローンファイルの作成

Crontabファイルを新規作成するには、`crontab -e`コマンドを使用します。

デフォルトエディタで開かれるので、Cronタスクを追加して保存します。

クローンファイルの編集

Crontabファイルを編集するにも`crontab -e`コマンドを使用します。

既存のCronタスクを変更するか、新しいタスクを追加して保存するのです。

クローンファイルの一覧表示

登録されているCronタスクを一覧表示するには、`crontab -l`コマンドを使用します。

クローンファイルの削除

Crontabファイルを削除するには、`crontab -r`コマンドを使用します。

crontabのバックアップとリストア

Crontabファイルのバックアップは、`crontup -l > backup-file`コマンドでバックアップファイルを作成します。

リストアするには、`crontab backup-file`コマンドを使用してバックアップファイルを復元します。

クローンのスケジュール設定実例

crontabでスケジューリングをおこなう方法をご覧ください。

ケースに合わせた方法をご紹介してますので、参考にしながらcrontabが使えるはずです。

  • 時間指定の基本構文
  • 繰り返し間隔の設定方法
  • よく使われるスケジュール設定例
  • 複雑なスケジュール設定例

時間指定の基本構文

Crontabでは、分(0-59)、時(0-23)、日(1-31)、月(1-12)、曜日(0-7)を指定してタスクをスケジュールできます。

曜日の0と7はどちらも日曜日を表します。

繰り返し間隔の設定方法

繰り返し間隔を設定するには、`/`を使用します。例えば、`*/5 * * * *`は5分ごとに実行するタスクを指定します。

よく使われるスケジュール設定例

以下は一般的なスケジュール設定の例です。

  • 毎日0時に実行: `0 0 * * *`
  • 毎週月曜日の9時に実行: `0 9 * * 1`
  • 毎月1日の0時に実行: `0 0 1 * *`

複雑なスケジュール設定例

以下は複雑なスケジュール設定の例です。

  • 平日のみ15時30分に実行: `30 15 * * 1-5`
  • 2月と8月の1日と15日の午前3時に実行: `0 3 1,15 2,8 *`

詳しい場面別の設定例はこちらでも解説しています。

Crontabの設定例10選

crontab は UNIX ベースのシステムで定期的にジョブを実行するためのスケジューラツールです。

以下は crontab の異なるケースの例を示しています。

  • 毎分実行
  • 毎日の午前3時に実行
  • 毎月の第1日と第15日の午前4時に実行
  • 5分ごとに実行
  • 毎週月曜日の午後2時に実行
  • 月、水、金の22時に実行
  • 毎月の最終日に実行
  • 毎年の1月1日と12月31日に実行
  • 10日間隔で実行
  • 毎月第1日曜日の午後1時に実行

毎分実行

* * * * * /path/to/command

毎日の午前3時に実行

0 3 * * * /path/to/command

毎月の第1日と第15日の午前4時に実行

0 4 1,15 * * /path/to/command

5分ごとに実行

*/5 * * * * /path/to/command

毎週月曜日の午後2時に実行

0 14 * * MON /path/to/command

月、水、金の22時に実行

0 22 * * MON,WED,FRI /path/to/command

毎月の最終日に実行

このケースは少し複雑ですが、以下のように書くことができます。

59 23 28-31 * * [ "$(date +\%m -d tomorrow)" != "$(date +\%m -d +2days)" ] && /path/to/command

毎年の1月1日と12月31日に実行

0 0 1 1 * /path/to/command
0 0 31 12 * /path/to/command

10日間隔で実行

これは直接の crontab の記述では難しいですが、外部スクリプトを使用して次のように書くことができます。

0 0 */10 * * /path/to/command

毎月第1日曜日の午後1時に実行

0 13 * * SUN [ "$(date +\%d -d +1week)" -le "07" ] && /path/to/command

クローンジョブの管理

一度設定したクローンジョブを管理する方法をご説明します。

動作が正しいかどうかを随時チェックする必要があるでしょう。

  • クローンジョブの実行状況確認
  • クローンジョブの実行ログ
  • クローンジョブのデバッグ方法
  • クローンジョブのエラー対処

クローンジョブの実行状況確認

Cronタスクの実行状況は、`/var/log/syslog`(Ubuntu/Debian)や`/var/log/cron`(CentOS/RHEL)で確認できます。

クローンジョブの実行ログ

Cronタスクの実行結果をログファイルに保存するには、タスクの末尾に`> /path/to/logfile 2>&1`を追加します。

クローンジョブのデバッグ方法

Cronタスクが期待通りに動作しない場合、以下の方法でデバッグできます。

  • タスクの構文やパスが正しいか確認する
  • 環境変数が適切に設定されているか確認する
  • ログファイルを確認してエラー内容を調べる
  • タスクを手動で実行して問題を特定する

クローンジョブのエラー対処

Cronタスクがエラーになった場合、以下の対処方法が考えられます。

  • タスクの構文やパスを修正する
  • 環境変数を修正する
  • コマンドのオプションや引数を修正する
  • 必要に応じてスクリプトの修正を行う

crontabのセキュリティ

crontabにおけるセキュリティリスクを調べました。

注意すべき点などを説明しています。

  • 権限管理
  • セキュリティのベストプラクティス

権限管理

Cronタスクの実行権限は、タスクを登録したユーザーによって制御されます。

タスクに適切な権限を設定することで、セキュリティリスクを低減できます。

セキュリティのベストプラクティス

Crontabのセキュリティを向上させるためのベストプラクティスは以下の通りです。

  • 最小権限原則に従ってタスクを実行するユーザーを設定する
  • タスクの実行結果をログファイルに保存し、定期的に監査する
  • 不要なCronタスクを削除して管理を容易にする

よくあるトラブルシューティング

crontabの使用で起きるよくあるトラブルとその対処法をまとめています。

問題が起こる前でも見ておけば、事前に回避ができる可能性があるでしょう。

  • クローンジョブが実行されない
  • クローンジョブが途中で停止する
  • クローンジョブが予定時刻に実行されない
  • クローンジョブが期待通りに動作しない

クローンジョブが実行されない

実行されない原因は、タスクの構文エラーやパーミッションの問題などが考えられます。

タスクの設定やログファイルを確認し、問題を特定して対処します。

クローンジョブが途中で停止する

タスクが途中で停止する原因は、リソースの不足やスクリプトのエラーなどが考えられます。

ログファイルを確認し、問題を特定して対処します。

クローンジョブが予定時刻に実行されない

タスクが予定時刻に実行されない原因は、時間指定の誤りやCronデーモンの問題などが考えられます。

タスクの設定やシステムの状況を確認し、問題を特定して対処します。

クローンジョブが期待通りに動作しない

タスクが期待通りに動作しない原因は、コマンドの誤りやスクリプトの問題などが考えられます。

タスクの設定やスクリプトを確認し、問題を特定して対処します。

まとめ

当記事では、以下をご説明しました。

  • Crontabの基本概念
  • コマンドのインストールと環境設定
  • 基本操作
  • スケジュール設定
  • クローンジョブの管理
  • セキュリティ
  • よくあるトラブルシューティング

Crontabはシステム管理者や開発者にとって非常に便利なツールです。

正しく使用することでタスクの自動化やスケジューリングを効率的におこなえます。

適切な設定とセキュリティ対策を講じて、Crontabを安全かつ効果的に活用してください。

タイトルとURLをコピーしました