Linuxタスクをバックグラウンドでスケジュールして実行する方法について検討し、自動的に定期的な間隔で実行する方法を見ていきますCrontabコマンドを使用します。
頻繁に発生するジョブを手動で処理することは、システム管理者にとって困難な作業です。このようなタスクは、cronデーモンを使用してLinuxやUnix系のオペレーティングシステムで人間の介入なしにバックグラウンドでスケジュールして実行することができます。
Linuxシステムのバックアップ、定期的な更新のスケジュール、およびファイルの同期など、さまざまなタスクをCronデーモンを使用して自動化できます。これは、コマンドラインからスケジュールされたタスクを実行するために使用されるデーモンです。または、オンラインツールを使用してcronジョブを生成することもできます。
Cronは、毎分起動し、数えられるスケジュールされたタスクを確認します – Crontab(CRON TABle)は、このような繰り返しタスクをスケジュールするためのテーブルです。
ヒント:各ユーザーは、自分専用のcrontabを作成、変更、削除できます。デフォルトでは、cronはユーザーに対して有効になっていますが、/etc/cron.denyファイルにエントリを追加することでユーザーを制限できます。
LinuxのCrontab
Crontabファイルは、実際には1行ごとにコマンドを含み、スペースまたはタブで区切られています。最初の5つのフィールドは、タスクを実行する時間を表し、最後のフィールドはコマンドです。
- Minute(値の範囲:0〜59)
- Hour(値の範囲:0〜23)
- 月の日(値の範囲:1〜31)
- 1-12年の月(各月の名前の最初の三文字、例:JanまたはJun)
- 週の曜日(各曜日の名前の最初の三文字、例:SunまたはWed)
- コマンド – スケジュールしたいコマンドまたはスクリプトのパス。
1. Crontabエントリのリスト
現在のユーザーのcrontabコマンドを-l
オプションで使用して、タスクをリストまたは管理します。
# crontab -l 00 10 * * * /bin/ls >/ls.txt
2. Crontabエントリの編集
crontabエントリを編集するには、以下に示す-e
オプションを使用します。以下の例では、予定されたジョブをVIエディタで開きます。必要な変更を行い、設定を自動的に保存するために:wq
キーを押して終了します。
# crontab -e
3. 特定のユーザーの予定されたCronジョブのリスト
特定のユーザー(tecmintとする)の予定されたジョブを、-u
(ユーザー)および-l
(リスト)のオプションを使用してリストします。
# crontab -u tecmint -l no crontab for tecmint
注意:rootユーザーのみが他のユーザーのcrontabエントリを完全に見る権限を持っています。通常のユーザーは他者のものを表示できません。
4. Crontabエントリの削除
注意:-r
パラメータを使用したCrontabは、確認なしに完全なスケジュールされたジョブを削除します。ユーザーのcrontabを削除する前に-i
オプションを使用してください。
# crontab -r
5. Crontabを削除する前にプロンプトを表示
-i
オプションを使用したcronタブは、ユーザーのcronタブを削除する前にユーザーに確認を求めます。
# crontab -i -r crontab: really delete root's crontab?
6. 許可される特殊文字(*、-、/、?、#)
- アスタリスク(*) – フィールド内のすべての値または可能な値に一致します。
- ハイフン(-) – 範囲を定義するために使用されます。
- スラッシュ (/) – 1番目のフィールド/10は、10分ごとまたは範囲の増分を意味します。
- コンマ(,) – 項目を区切るために使用されます。
7. システム全体のクロンスケジュール
A system administrator can use the predefined cron directory as shown below.
- /etc/cron.d
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.monthly
- /etc/cron.weekly
8. 特定の時刻にジョブをスケジュールする
以下のジョブは、毎日午前12時30分に/tmpから空のファイルとディレクトリを削除します。cronコマンドを実行するユーザー名を指定する必要があります。以下の例では、rootユーザーがクロンジョブを実行しています。
# crontab -e 30 0 * * * root find /tmp -type f -empty -delete
9. 一般的なスケジュールのための特殊文字列
Strings | Meanings |
---|---|
@reboot | The command will run when the system reboots. |
@daily | Once per day or may use @midnight. |
@weekly | Once per week. |
@yearly | Once per year. we can use the @annually keyword also. |
同じものを使用する場合、cronコマンドの5つのフィールドをキーワードで置き換える必要があります。
10. ダブルアンパサンド(&&)で複数のコマンド
以下の例では、command1とcommand2が毎日実行されます。
# crontab -e @daily <command1> && <command2>
11. メール通知を無効にする。
デフォルトでは、cron は cron ジョブを実行するユーザーアカウントにメールを送信します。これを無効にする場合は、以下の例のようにクロンジョブを追加してください。ファイルの末尾に>/dev/null 2>&1 オプションを使用すると、cron の結果のすべての出力を/dev/nullにリダイレクトします。
[root@tecmint ~]# crontab -e * * * * * >/dev/null 2>&1
結論: タスクの自動化は、タスクをより良い方法で、エラーなく、効率的に実行するのに役立ちます。ターミナルで「man crontab」と入力して、詳細について crontab のマニュアルページを参照できます。
Source:
https://www.tecmint.com/11-cron-scheduling-task-examples-in-linux/