crontab コマンドは、Unix および Linux で定期的な実行命令を設定するために使用されます。これは、インターネットで非常に一般的なテクノロジです。多くのタスクは、周期的な実行のために crontab で設定されます。 crontab を使用しない場合、タスクは常駐プログラムとなり、プログラムに高い要求が課せられます。1 つの要件は、プログラムが 24 時間 365 日稼働していること、もう 1 つは、スケジュール プログラムが信頼できることです。実際の作業では、90% のプログラムは、上記の 2 つの問題を解決するためにそれほど多くの時間と労力を費やす必要はありません。独自のビジネス ロジックを記述し、それを産業グレードのプログラムである Crontab を通じてスケジュールするだけです。Crontab の信頼性と堅牢性に疑いの余地はありません。 crontab コマンドの簡単な紹介 1 分ごとにデータを同期するタスクを設定するとします。この同期スクリプトのパスは /home/blue/do/rsyncfile.sh です。次のように設定します。ユーザー blue として、ターミナルに次のように入力します。 crontab -e # その後、vi 編集画面に入り、作業を編集できるようになります。各ジョブが行になっていることに注意してください。 #タイムシェアリング日、月、週|<==================タスクの完全なコマンドライン * * * * * /home/blue/do/rsyncfile.sh デフォルトでは、/etc/cron.deny に含まれていないユーザーは誰でも、直接「crontab -e」を発行して自分のルーチン コマンドを編集できます。全体のプロセスは上記のとおりです。vi 編集画面に入り、1 行ずつ編集します。編集後は、「:wq」と入力して保存し、vi を終了します。 5 分ごとにデータ同期を実行するようにスクリプトを変更する必要がある場合は、crontab -e を使用してエディターに入ることもできます。 */5 * * * * /home/blue/do/rsyncfile.sh サーバーに問題があり、1 日データが同期されない場合は、データを補充する必要があります。データを補充するためのスクリプトが /home/blue/do /rsyncfile_day.sh であるとします。ただし、昼間はピーク期間であり、夜間はオフピーク期間であるため、ユーザーはあまりいません。データを補充すると、特に日中は多くの帯域幅が占有され、通常の業務に影響します。したがって、通常は午前 2 時にデータ補充タスクを開始し、crontab -e を使用してエディターに入ります。 0 2 1 4 * /home/blue/do/rsyncfile_day.sh このようにして、データ補完スクリプトは 4 月 1 日の午前 2 時に開始されます。 データの同期は、インターネット企業では非常に一般的なタスクです。ここで、crontab の魅力がわかります。最も単純なビジネス ロジックを記述し、スケジュールを crond に任せるだけで、高い信頼性でタスクを完了できます。このようなスケジュール プログラムを自分で記述する場合、信頼性と安定性を実現するのにどれだけの労力がかかるかはわかりません。 crontab コマンドの構文 crontab [-u ユーザー名] [-l|-e|-r] オプションとパラメータ: -u: このタスクを実行できるのは root だけです。つまり、他のユーザーが crontab タスク スケジュールを作成/削除できるように支援できます。 -e: crontabジョブの内容を編集 -l: crontabジョブの内容を表示 -r: すべてのcrontabジョブの内容を削除します。1つの項目のみを削除する場合は、-eを使用して編集してください。 ユーザーの現在の crontab の内容を照会します。 crontab -l */5 * * * * /home/blue/do/rsyncfile.sh 0 2 1 4 * /home/blue/do/rsyncfile_day.sh ユーザーの現在の crontab をクリアします。 crontab -r crontab -l 青のcrontabがない 現在のユーザーの crontab タスクを削除する場合は、crontab -e を使用してエディターに入り、対応するタスクを削除します。 crontab コマンドの制限
優先順位としては、/etc/cron.allow が /etc/cron.deny よりも優先されます。上記から判断すると、これら 2 つのファイルのうち 1 つだけが制限対象として選択されます。したがって、設定の判断に影響を与えないように、1 つだけ残すことをお勧めします。一般的に、システムはデフォルトで /etc/cron.deny を保持します。crontab を実行させたくないユーザーを、1 行に 1 アカウントずつ /etc/cron.deny に書き込むことができます。 crontab設定ファイルの詳細な説明
それは crontab -e です。この crontab は実際には実行中のファイル /usr/bin/crontab ですが、/etc/crontab は「プレーン テキスト ファイル」であり、root として編集する必要があります。 まず、crontabファイルの内容を見てみましょう。 /etc/crontab を編集する # /etc/crontab: システム全体のcrontab # 他のcrontabとは異なり、`crontab'を実行する必要はありません # このファイルを編集するときに新しいバージョンをインストールするコマンド # および/etc/cron.d内のファイル。これらのファイルにはユーザー名フィールドもあり、 # 他の crontab では実行されません。 シェル=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # mh dom monitor dow user コマンド 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * ルートテスト -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 ルートテスト -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * ルートテスト -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) このファイルは、先ほど発行した crontab -e の内容とほぼ同じです。少しだけ違うところがある PATH=....: 実行ファイルを入力するための検索パスは次のとおりです。デフォルトのパス構成を使用するだけで十分です。 17 * * * * root cd / && run-parts --report /etc/cron.hourly: この では、次の一連のコマンドは何でしょうか? システムがデフォルトで一連の日常的なタスクをどのようにスケジュールするかをご存知ですか? システムが 2 分ごとにこのディレクトリ内のすべての実行可能ファイルを実行するようにディレクトリを作成したいとします。/etc/crontab に次の行を記述します。 */2 * * * * ルート実行部分 /etc/cron.min もちろん、/etc/cron.min ディレクトリが存在している必要があります。 「プログラム」を実行するだけで、ディレクトリが必要ない場合はどうすればよいでしょうか?どうすればいいですか?たとえば、ネットワーク トラフィックを検出するときに、5 分ごとに検出して分析するとします。次のように記述できます。 */5 * * * * ルート /bin/mrtg /etc/mrtg/mrtg.cfg どうやって!ルーチンコマンドの作成は簡単です!システム管理者であり、日常的なシステムメンテナンスを担当している場合は、/etc/crontab ファイルを直接変更できます。便利で管理も簡単! crontabコマンドの原理 ユーザーが crontab コマンドを使用してタスク スケジュールを作成すると、タスクは crond サービスの最小検出制限は「分」なので、「cron は 注意: Linux の crontab は crontabコマンド形式の詳細な説明 各タスク (各行) の形式には 6 つのフィールドがあり、これらの 6 つのフィールドの意味は次のとおりです。
さらに面白いのは「周」です!週の数字が0または7の場合は「日曜日」を意味します。さらに、いくつかの補助文字があり、おおよそ次のようになります。
周と太陽と月は共存できない もう一つの注意点は、「サイクルとして週または日と月を使用できますが、「月と曜日」モデルでは作業できません。」です。 つまり、次のようなタスク スケジュールを記述することはできません。 30 12 11 9 5 root echo "just test" <==これは間違いです 当初、このタスクは 9 月 11 日が金曜日の場合にのみ実行されると考えていました。残念ながら、システムによって、このタスクは毎週金曜日、または毎年 9 月 11 日に実行されると判断される可能性があります。これは、当初の計画とは異なります。したがって、この点には注意する必要があります。上記の記述は誤りです。 CentOS で crontab の実行履歴を表示する crontab にスケジュールされたタスクを追加しましたが、期待した結果が得られませんでした。crontab が対応するタスクを実行していないのではないかと疑いました。しかし、crontab が実行されたかどうかをどのように判断すればよいのでしょうか? これには、crontab の実行履歴を表示する必要があります。具体的な場所は次のとおりです。 cd /var/log テール -100 クローン cron ファイルで実行された関連するスケジュールされたタスクを確認できます。 Crontab コマンド形式の説明 crontab -e を使用して、実行するコマンドを追加できます。 コマンド実行の結果は、標準出力またはエラー出力のいずれであっても、電子メールでユーザーに送信されます。 追加するコマンドは次の形式である必要があります。 * * * * * /コマンドパス 最初の 5 つのフィールドは、作業をいつ開始するかを指定する整数値を取ることができ、6 番目のフィールドは文字列、つまりコマンド フィールドであり、crontab によって実行されるようにスケジュールされたコマンドが含まれます。 各フィールドはスペースとタブで区切られます。 最初の 5 つのフィールドは次のものを表します。
いくつかの特殊記号も使用できます:
例: 00 8,12,16 * * * /data/app/scripts/monitor/df.sh 30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh 10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.sh 10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh 10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.sh : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : Crontabコマンドのバックグラウンド実行& ジョブがフォアグラウンドで実行されている場合、端末はジョブによって占有されます。ジョブがバックグラウンドで実行されている場合、端末は占有されません。 & コマンドを使用すると、ジョブをバックグラウンドで実行できます。 のように: 30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh & ジョブをバックグラウンドで実行するときには注意してください。ユーザーの操作を必要とするコマンドをバックグラウンドで実行しないでください。そうしないと、マシンはただ待機するだけになります。 ただし、バックグラウンドで実行されているジョブは引き続き結果を画面に出力し、作業を妨げます。バックグラウンドで実行するジョブが大量の出力を生成する場合は、次の方法を使用してその出力をファイルにリダイレクトするのが最適です。 のように: コマンド >out.file 2>&1 & この例では、2>&1 は、すべての標準出力とエラー出力が out.file というファイルにリダイレクトされることを意味します。 Crontab コマンド 2>&1 の意味 例を見てみましょう: 0 2 * * * /u01/test.sh >/dev/null 2>&1 & この文は、このコマンドをバックグラウンドで実行し、エラー出力 2 を標準出力 1 にリダイレクトし、すべての標準出力 1 を /dev/null ファイルに格納する、つまりクリアすることを意味します。 以下に意味する数字をいくつか示します。
次のように書くこともできます。 0 2 * * * /u01/test.sh 1>/u01/out.file & 0 2 * * * /u01/test.sh 2>/u01/out.file & 0 2 * * * /u01/test.sh 2>/u01/out.file 2>&1 & tesh.sh コマンドの出力を out.file にリダイレクトします。つまり、出力内容は画面に印刷されず、out.file ファイルに出力されます。 2>&1 はエラー出力を標準出力にリダイレクトします。 次に、標準入力をファイル out.file にリダイレクトします。 &1 はファイル記述 1 を表し、標準出力を意味します。ここで & が欠落している場合は、数字 1 となり、ファイル 1 へのリダイレクトを意味します。 & :バックグラウンド実行 テスト:
Crontabコマンド2>&1が最後に記述されている理由
まず、コマンド > file は標準出力を file にリダイレクトし、2>&1 は標準出力をコピーした標準エラーで、これも file にリダイレクトされます。最終結果は、標準出力とエラーの両方が file にリダイレクトされることです。 次のように変更した場合: コマンド 2>&1 >ファイル 2>&1 標準エラーは標準出力の動作をコピーしますが、標準出力は端末内に残ります。 >file 出力はファイルにリダイレクトされますが、標準エラーは端末に残ります。 学んだ教訓: 毎晩 23:00 にサーバー上で Python スクリプトを実行して、MySql データベースをバックアップする予定です。コマンドは次のとおりです。 * 23 * * * python /var/www/html/crontab_python/back_db.py >/dev/null 2>&1 その結果、毎回 60 個のバックアップ ファイルが生成されました。スケジュールされたタスク コマンドを注意深く確認したところ、「分」の位置に「0」が欠落していることがわかりました。これは、「*」がその位置の任意の値を表すためです。変更内容は次のとおりです。 0 23 * * * python /var/www/html/crontab_python/back_db.py >/dev/null 2>&1 次にPHPスクリプトのスケジュールされた実行 0 4 * * * /usr/local/php/bin/php /usr/local/nginx/www/backup-db/backup_db.php 172.16.8.26 >/dev/null 2>&1 0 4 * * * /usr/local/php/bin/php /usr/local/nginx/www/backup-db/backup_db.php 172.16.10.151 >/dev/null 2>&1 この記事では、LinuxのスケジュールタスクCrontabコマンドの詳細な使用方法を紹介し、Crontabコマンドの使用上のヒントと、仕事で遭遇する問題の解決策をまとめています。皆さんのお役に立てば幸いです。 以下もご興味があるかもしれません:
|
<<: Weibo の一括フォロー解除機能を実装する JavaScript コード
NATこのようにして、仮想マシンのネットワーク カードはホストの VMnet8 に接続されます。この...
前回の記事では、クロステーブル更新について書きました。自分が書いた SQL を見たとき、自分がバカみ...
コードをコピーコードは次のとおりです。 <div class="content&qu...
CSS Houdini は、CSS 分野における最もエキサイティングなイノベーションとして知られてい...
中国語チュートリアルhttps://www.ncnynl.com/category/turtlebo...
React の経験がある人なら、コンポーネントインスタンスオブジェクトや DOM オブジェクトを取得...
質問:よく使用されるコマンド「ll」が無効であるか、コマンドが見つかりません理由: 「ll」コマンド...
適用シナリオ: シールのさまざまな状態に応じて、さまざまな状態のシールの数をカウントする必要がありま...
Docker はますます多くのシナリオで使用されています。コマンドラインツールに慣れていない人にとっ...
効果デモ.html <html> <ヘッド> <メタ文字セット=&qu...
突然、ドキュメントの保存と共同作業のためのプライベート サービスを構築する必要がありました。多くの場...
目次1. インストールと導入2. PDFファイルをパッケージ化してエクスポートする方法構成の詳細PD...
最近、IIS をサーバーとして使用すると、apk ファイルがサーバーにアップロードされましたが、ダウ...
Web 標準に準拠した Web ページの構築は、jb51.net が常に全員と議論しているトピックで...
今日、会社のプロジェクトでは docker を設定する必要があります。Windows に正常にインス...