【linux】crontabコマンドの使い方


crontab コマンドパラメータの説明

crontab [-u username] [-l|-e|-r]
オプションとパラメータ:
-u: root のみがこのタスクを実行できます、つまり、他のユーザーが crontab ジョブ スケジュールを作成/削除できるようにします;
-e: crontab
-lを編集します: crontab の作業内容を確認します-r
: すべての crontab の作業内容を削除します。1 つの項目だけを削除したい場合は、-e を使用して編集してください


crontab コマンド形式の説明

  • 時刻の形式は次のとおりです。

f1 f2 f3 f4 f5 プログラム

  • このうち、f1は分、f2は時、f3は日、f4は月、f5は曜日を表します。
  • f1 が * を表す場合、プログラムは 1 分ごとに実行されることを意味し、f2 が * の場合、プログラムは 1 時間ごとに実行されることを意味します。
  • f1 が ab の場合は a 分から b 分まで実行されることを意味し、f2 が ab の場合は a 分から b 時間まで実行されることを意味します。
  • f1 が */n の場合は n 分ごとに実行されることを意味し、f2 が */n の場合は n 時間ごとに実行されることを意味します。
  • f1 が a、b、c、... の場合は、a、b、c、... 分で実行されることを意味し、f2 が a、b、c、... の場合、実行されることを意味しますa、b、c、... 時間後に実行されるという例えです。

各ジョブ(各行)のフォーマットには 6 つのフィールドがあり、その 6 つのフィールドの意味は次のとおりです。

代表的な意味 時間 日付(日) 注文
数値の範囲 0-59 0-23 1-31 1-12 0-7 注文
特殊文字 代表的な意味
* いつでもを表します
別居期間を表します
- 期間を表します
/n n は数値、つまり n 単位間隔ごとを表します
	*    *    *    *    *
	-    -    -    -    -
	|    |    |    |    |
	|    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)
	|    |    |    +---------- 月份 (1 - 12) 
	|    |    +--------------- 一个月中的第几天 (1 - 31)
	|    +-------------------- 小时 (0 - 23)
	+------------------------- 分钟 (0 - 59)

例えば

43 21 * * *        21:43 执行
15 05 * * *        05:15 执行
0 17 * * *         17:00 执行
0 17 * * 1         每周一的 17:00 执行
0,10 17 * * 0,2,3  每周日,周二,周三的 17:0017:10 执行
0-10 17 1 * *      毎月1日从 17:0017:10 毎隔1分钟 执行
0 0 1,15 * 1       毎月1日和15日和周一的 0:00 执行
42 4 1 * *         毎月1日的 4:42分 执行
0 21 * * 1-6       周一到周六 21:00 执行
0,10,20,30,40,50 * * * * 每隔10分 执行
*/10 * * * *       每隔10分 执行
* 1 * * *1:01:59 每隔1分钟 执行
0 1 * * *          1:00 执行
0 */1 * * *        毎时0分 每隔1小时 执行
0 * * * *          毎时0分 每隔1小时 执行
2 8-20/3 * * *     8:02,11:02,14:02,17:02,20:02 执行
30 5 1,15 * *      1日和15日的 5:30 执行

注意: 週と日と月は同時に共存できません。
「周期として週または日と月を使用することはできますが、「何月何日と何曜日」というモードは使用できません。

crontab ログのパス

# 【日志是按照天排列的】
[wqf@b1i10 ~]$ ll /var/log/cron*
-rwxrwxr-x 1 root root 1354975 Apr 25 18:20 /var/log/cron
-rwxrwxr-x 1 root root 3323417 Apr  2 03:21 /var/log/cron-20230402
-rwxrwxr-x 1 root root 3516278 Apr  9 03:43 /var/log/cron-20230409
-rwxrwxr-x 1 root root 3671741 Apr 16 03:37 /var/log/cron-20230416
-rwxrwxr-x 1 root root 3671864 Apr 23 03:47 /var/log/cron-20230423

/var/log/cron は、計画された特定のスクリプトが実行されたかどうかのみを記録しますが、Linux は、特定の実行が正しいかどうかと、スクリプト実行プロセス中のいくつかの情報を毎回ユーザーに電子メールを送信します。

crontabの注意事項

1. 環境変数の問題に注意する

crontab は Java 環境変数を認識しません。crontab
を使用してスクリプトを定期的に実行すると、スクリプトは実行できませんが、主に環境変数が読み取れないため、コマンド (./test.sh など) を使用すると正常に実行できます。 。

解決:

  • 1. スクリプトに含まれるすべてのファイル パスは、/usr/local/bin/docker などの絶対パス形式で記述する必要があります。

  • 2. シェル スクリプトの先頭で次のコードを使用します。

#!/bin/sh
. /etc/profile 
或者 
source /etc/profile   ##此文件为系统的每个用户设置环境信息。source在当前bash环境下执行命令。


. ~/.bash_profile ##在登录时用到的第三个文件是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次,默认情况下,设置一些环境变量,执行用户的.bashrc文件。
或者 
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev & ##设置环境变量
  • 3. /etc/crontab に環境変数を追加し、実行可能コマンドの前にコマンド ./etc/profile;/bin/sh を追加して、環境変数を有効にします。次に例を示します。
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh

概要: crontab がシェルを実行するとき、認識できるのは少数の環境変数だけであり、通常の環境変数は認識できないため、シェルを作成するときは、スクリプトを確実に実行するために、export を使用して変数を再宣言するのが最善です。

2. システムタスクのスケジューリングとユーザータスクのスケジューリング

root ユーザーのタスクのスケジュール操作は、「crontab -uroot -e」で設定することも、/etc/crontab ファイルに直接タスクのスケジュールを書き込むこともできます。タスクは /etc/crontab ファイルに配置され、システムを再起動するタスクを root ユーザーで作成しても無効になります。

3. その他の注意事項

1. 時間変数: crontab では、% は特別な意味を持ち、改行を意味します。使用する場合は、% をエスケープする必要があります。たとえば、頻繁に使用される日付「+%Y%m%d」は、 crontab では実行されません。日付「+%Y%m%d」に置き換える必要があります。

解決:

## date "+%Y%m%d"在crontab不执行
59 8-23 * * * nohup sh /apps/summary_fz_province/cdc_model/bin/m568_model_2/m568_model2.sh > /apps/summary_fz_province/cdc_model/log/m568_model_2/m568_model_$(date "+%Y%m%d%H").log 2>&1 &


## 换成date "+\%Y\%m\%d"
59 8-23 * * * nohup sh /apps/summary_fz_province/cdc_model/bin/m568_model_2/m568_model2.sh > /apps/summary_fz_province/cdc_model/log/m568_model_2/m568_model_$(date "+\%Y\%m\%d\%H").log 2>&1 &

2. crontab が突然失敗した場合は、/etc/init.d/crond restart を試して問題を解決できます。または、ログをチェックして、ジョブが実行されたか、エラー tail -f /var/log/cron が報告されたかどうかを確認します。
3. crontab -r をむやみに実行しないでください。ユーザーの Crontab ファイルを Crontab ディレクトリ (/var/spool/cron) から削除します。そのユーザーの crontab はすべて消えています。
4. 時間制限のあるタスクには忘れずにコメントを追加してください

おすすめ

転載: blog.csdn.net/sodaloveer/article/details/130368383
おすすめ