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でよく使われる配列重複排除実戦ソースコード

推薦する

WeChat アプレットカスタムタブバーステップ記録

目次1. はじめに2. タブバーのスタイルをカスタマイズする3. カスタムタブバーと関連設定を導入す...

Vueログイン機能の実装

目次前面に書かれたログインの概要ログインビジネスプロセスログインサービスの関連技術ポイントログイント...

Dockerがコンテナを起動するたびに、IPとホストが指定した操作が実行されます。

序文Dockerを使ってHadoopクラスタを起動するたびに、ネットワークカードの再バインド、IPの...

Reactフックとzarmコンポーネントライブラリ構成に基づいてh5フォームページを開発するためのサンプルコード

最近、React Hooks を zarm コンポーネント ライブラリと組み合わせて使用​​し、js...

MySQL 5.7.10 インストール ドキュメント チュートリアル

1. 依存パッケージをインストールする yum -y インストール gcc-c++ ncurses-...

CSS で波の効果を作成するためのアイデア

以前、純粋な CSS を使用して波の効果を実現する方法をいくつか紹介しました。それらについては、次の...

IE 環境での css-vars-ponyfill の使用に関する詳細な説明 (nextjs ビルド)

css-vars-ポニーフィルCSS 変数を使用して Web ページのスキニングを実現すると、互換...

VMware 仮想マシンに CentOS と Qt をインストールするチュートリアル図

VMware のインストールパッケージのインストールダウンロードアドレス: https://www....

Facebook 出会い系サイトデザインのユーザー エクスペリエンス分析

<br />関連記事: Facebookの情報アーキテクチャの分析 元記事: http:...

LinuxにKafkaをインストールする

目次1.1 前提条件としてのJava環境1.2 Zookeeperのインストールと設定1.3 Kaf...

MySQL が my.cnf を読み込む順序の詳細

目次MySQLがmy.cnfを読み込む順序1. mysql.server の起動方法2. mysql...

LinuxはNetworkManagerを使用してMACアドレスをランダムに生成します

今では、自宅のソファーに座っていても、外の喫茶店にいても、ノートパソコンの電源を入れてWi-Fiに接...

js の一般的でない演算子と演算子の概要

一般的な演算子と JavaScript の演算子の概要カテゴリオペレーター算術演算子+、–、*、/、...

vue-admin-template 動的ルーティング実装例

ログインを提供し、ユーザー情報データインターフェースを取得するapi/user.js内 '@...