Linuxでのcrontabの使い方と注意点の詳しい説明

Linuxでのcrontabの使い方と注意点の詳しい説明

Crontab は定期的な実行を設定するために使用されるコマンドです。そのデーモン プロセスは crond です。crontab には 2 つの設定モードがあり、1 つはユーザー レベルの crontab、もう 1 つはシステム レベルの crontab です。ここではこれらを個別に説明します。

ユーザーレベルのcrontab

ユーザーが新しい周期ジョブ スケジュールを作成する場合、使用される crontab コマンド (crontab -e) はすべてのユーザーが使用できます。通常のユーザーは、スケジュールされたタスクを自分自身に対してのみ設定できます。その後、/var/spool/cron/usenameに自動的に書き込みます。

ユーザーコントロールファイル

/etc/cron.allow :
crontab を使用できるユーザーを記述します。このファイル内のユーザーのみが crontab を使用でき、これはホワイトリストに相当します。

/etc/cron.deny :
crontab の使用を禁止するユーザーを記述します。このファイル内のユーザーのみが crontab の使用を禁止され、ブラックリストに相当します。/etc/cron.allow は /etc/cron.deny よりも優先度が高くなります。混乱を避けるため、どちらか一方のみを使用することをお勧めします。

注文

crontab [-u ユーザ名] [-l|-e|-r] 
パラメータ: 
-u: このタスクは、他のユーザーが crontab 作業スケジュールを作成/削除できるように、root だけが実行できます。 -e: vi を呼び出して crontab の作業内容を編集します。 -l: crontab の作業内容を一覧表示します。 -r: すべての crontab 作業内容を削除します。

文法

# .---------------- 分 (0 - 59) 
# | .------------- 時間 (0 - 23)
# | | .---------- 日付 (1 - 31)
# | | | .------- 月 (1 - 12) または jan、feb、mar、apr ...
# | | | | .---- 曜日 (0 - 6) (日曜日 = 0 または 7) または sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * 注文

構文はシステム レベルの crontab と非常に似ていますが、違いは、システム レベルの crontab (/etc/crontab) では実行ユーザーを指定する必要があるのに対し、ここでは実行ユーザーを指定する必要がないことです。

以下にいくつか例を挙げます。

*/10 * * * * /home/test.sh #現在のユーザーとして10分ごとに/home/test.shスクリプトを実行します 0 2 * * * /home/test.sh #毎日2時 0 5,17 * * * /home/test.sh #毎日5時と17時 0 17 * * sun /home/test.sh #毎週日曜日の17時 0 4,17 * * sun,mon /home/test.sh #毎週月曜日と日曜日 @reboot /home/test.sh #システムが再起動したとき

推奨されるオンラインツールは次のとおりです: cron式をオンラインで生成する

システム全体のcrontab

システムレベルの crontab は、通常、システムの日常的なタスクに使用されます。この方法は、他のユーザーのスケジュールされたタスクを設定するのに便利で直接的であり、シェルの実行などを指定することもできます。設定ファイルは /etc/crontab であり、root ユーザーのみが編集できます。

/etc/crontabを編集する

デフォルトの内容は次のとおりです。

SHELL=/bin/bash これは、使用するシェル インターフェイスを指定します PATH=/sbin:/bin:/usr/sbin:/usr/bin これは、ファイル検索パスを指定します MAILTO=root 追加の STDOUT があり、そのデータに電子メールが送信される場合は、システム ユーザーまたは電子メール アドレス ([email protected] など) を指定できます。
# 詳細については man 4 crontabs を参照してください
# ジョブ定義の例:
# .---------------- 分 (0 - 59) 
# | .------------- 時間 (0 - 23)
# | | .---------- 日付 (1 - 31)
# | | | .------- 月 (1 - 12) または jan、feb、mar、apr ...
# | | | | .---- 曜日 (0 - 6) (日曜日 = 0 または 7) または sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * ユーザー名コマンド

今すぐ:

毎日、毎月、毎週の期間でユーザータスクコマンドを実行します。

たとえば、/home/test.sh スクリプトを 10 分ごとに root として実行するスケジュールされたタスクを追加する場合は、次のように追加します。

*/10 * * * * ルート /home/test.sh

実行者ルートを省略しないでください (実行者はユーザー レベルの crontab で指定する必要はありません)。省略すると、/var/log/cron ログにエラー「ERROR (getpwnam() failed)」が表示され、スケジュールされたタスクは正しく実行されません。

サービスを再起動する

一般的に言えば、Linux の crontab は /etc/crontab 内のルーチン タスクを 1 分ごとに自動的に再読み込みします。ただし、何らかの理由または他の Unix システムでは、crontab はメモリに読み込まれるため、/etc/crontab を変更した後、すぐに実行されない場合があります。この場合は、crontab サービスを再起動する必要があります。

ここでは CentOS を例に挙げます。

service crond start //サービスを開始します service crond stop //サービスを終了します service crond restart //サービスを再起動 service crond reload //設定を再読み込み service crond status //サービスのステータス

CentOS 7の場合:

systemctl restart crond.service // サービスを再起動systemctl start crond.service // サービスを開始systemctl stop crond.service // サービスを停止systemctl reload crond.service // 構成を再読み込みsystemctl status crond.service // サービスのステータス

その他の考慮事項

不要な出力を抑制する

実行結果や実行オプションに出力データがある場合は、MAILTOで指定したアカウントにメールで送信されます。特定のスケジュールが失敗し続け、メールサービスに問題がある場合(実際、このサービスはまったくオンにしていません)、/var/spool/clientmqueue/に大量のファイルが生成されるため、crontabのコマンドの後に> /dev/null 2>&1を追加すると良いでしょう。

2>: リダイレクト エラー。
2>&1: エラーを出力先にリダイレクトします。つまり、上記コマンドの実行結果を /dev/null にリダイレクト、つまり破棄し、同時に発生したエラーも破棄します。

ログを確認する

ログは/var/log/cronに保存されます

文法上の違い

  • crontab -e コマンドは構文をチェックしますが、vim による /etc/crontab の編集ではチェックしません。crontab -e では実行者のユーザー名は必要ありませんが、/etc/crontab は指定する必要があることに注意してください。
  • 実行パスには絶対パスを使用する必要があります。そうしないと、実行が正常に実行されない可能性があります。
  • 週、日、月は共存できません。つまり、週、日、月ごとに循環させることはできますが、「月の日と曜日」モードを指定することはできません。

参考文献

バードブラザーズの Linux プライベートキッチン

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Django-crontabはサーバー上でスケジュールされたタスクのサンプルコードを実装します
  • Linux で指定された期間に数分ごとにタスク スケジュール crontab を自動的に実行する方法
  • CentOS6で定期的にjarプログラムを実行するスクリプトをcrontabで実行する
  • Laravelはcrontabが実行されない問題を解決します
  • crontab の実行結果を電子メールでユーザーに通知する方法
  • Django crontabタイミングタスクモジュールの操作方法の分析

<<:  sysbenchツールによるMySQLデータベースのパフォーマンステストの実装方法

>>:  JavaScriptでよく使われる配列重複排除実戦ソースコード

推薦する

JavaScript ツールチェーンの不完全なガイド

目次概要静的型チェックコードスタイルチェック(Linter)パッケージマネージャーモジュールローダー...

テーブルを使用する場合と CSS を使用する場合 (経験の共有)

TW のメインテキスト ページは、以前は小さなモニターと低解像度のユーザーを考慮して幅が 850 ピ...

Linux で PHP curl 拡張機能をインストールする方法の詳細な説明

この記事では、Linux で PHP curl 拡張機能をインストールする方法について説明します。ご...

dockerにros2をインストールするための詳細な手順

目次メイントピック1. UbuntuにDockerをインストールする2. DockerにROS2-F...

Dockerデータボリューム操作の実装

データボリュームの使用開始先ほどのケースでは、ホストからコンテナにデータをコピーする必要がある場合、...

タブ切り替え機能を実装するJavaScriptカスタムプラグイン

この記事では、タブ切り替え機能を実装するためのJavaScriptの具体的なコードを参考までに共有し...

Docker で Tomcat、MySQL、Redis をインストールするための詳細な手順

目次DockerでTomcatをインストールするtomcatイメージを使用してコンテナを作成する(イ...

MySQL スロークエリ pt-query-digest スロークエリログの分析

1. はじめにpt-query-digest は、MySQL のスロー クエリを分析するためのツール...

ブラウザのスクロールバーのスタイルを変更するための純粋な CSS の例

CSSを使用してブラウザのスクロールバーのスタイルを変更する ::-webkit-スクロールバー{ ...

Vue3.0 ルーティング自動インポート方法の例

1. 前提条件インポートには require.context メソッドを使用します。vite で作成...

Vueでデータ例を定義する方法

序文開発プロセスにおいて、変数の定義は非常に頻繁かつ基本的なタスクです。変数の使用シナリオと範囲に応...

MySQL ビューの原理と基本操作例

この記事では、例を使用して、MySQL ビューの原理と基本操作を説明します。ご参考までに、詳細は以下...

メタ宣言注釈の手順

メタ宣言注釈の手順: 1. モバイル ページと 1 対 1 で対応するすべての PC ページを分類し...

Linux Dig コマンドの使用法

発掘紹介: Dig は、Unix ライクなコマンドライン モードで NS レコード、A レコード、M...

CSS ピックアップ矢印、カタログ、アイコン実装コード

1. CSS その他のアイコンアイコンを作成するには 3 つの方法があります。写真css (小さな矢...