Linux CentOS でスクリプトを定期的に実行するように設定する方法

Linux CentOS でスクリプトを定期的に実行するように設定する方法

多くの場合、サーバーでスクリプトを定期的に実行して操作をトリガーする必要があります。たとえば、Qiniu のツールを使用してアップロードする場合、同期ファイルに新しいファイルが追加されると、必要な同期コマンドを完了するためのスケジュールされたスクリプトを提供できます (Qiniu の qrsbox ツールは自動的に同期します。アップロードを自動的に監視するには、同期フォルダーにファイルを追加するだけです)。

1. crontabをインストールする

[root@CentOS ~]# yum install vixie-cron
[root@CentOS ~]# yum install crontabs

vixie-cron パッケージは cron のメイン プログラムです。

crontabs パッケージは、cron デーモンを駆動するために使用されるテーブルをインストール、アンインストール、または一覧表示するプログラムです。

2. crontabサービスを有効にする

service crond start //サービスを開始する

この cron サービスを開始および停止するには、次の方法を使用します。

service crond start //サービスを開始する

service crond stop // サービスをシャットダウンする

service crond restart //サービスを再起動する

service crond reload //設定を再読み込み

crontab サービスのステータスを表示します: service crond status

crontab サービスを手動で開始します: service crond start

次のコマンドを実行して、crontab サービスが起動時に開始するように設定されているかどうかを確認します: ntsysv

自動起動に追加:

chkconfig –level 35 crond オン

さらに、ntsysv コマンドと chkconfig コマンドについても紹介します。

ntsysv コマンドは、ブート起動を設定するためのグラフィカル インターフェイス管理モードです。このコマンドを使用するには、インストールする必要があります。yum install -y ntsysv をインストールした後は、ntsysv を実行するだけで、グラフィカル管理インターフェイスが表示されます。

上下キー: 中央のボックス内のサービス間を移動するために使用できます。

スペースバー: 必要なサービスを選択するために使用できます。[*] は開始を意味します。

Tab キー: ボックス、OK、キャンセル間を移動できます。

[F1]キー:サービスの説明を表示できます。

chkconfig コマンドライン形式については、起動時に自動的に開始するか、6 つの起動レベルでサービスの実行状態を照会するかを設定します。

起動時に crond サービスが自動的に開始するように設定します。

[root@CentOS ~]# chkconfig crond をオン

各ブートレベルでcrondサービスの実行状態を表示する

[root@CentOS ~]# chkconfig –list crond

crond 0: 無効 1: 無効 2: 有効 3: 有効 4: 有効 5: 有効 6: 無効

レベル 2、3、4、5 で crond サービスが自動的に開始されることがわかります。

crond サービスの自動起動をキャンセルします。

[root@CentOS ~]# chkconfig crond をオフにする

3. 実行するスクリプトを設定する

新しいスケジュール タスクを追加するには、次の 2 つの方法があります。

1) コマンドラインに crontab -e と入力し、対応するタスクを追加して保存して終了します。

2) /etc/crontab ファイルを直接編集し (つまり、vi /etc/crontab)、対応するタスクを追加します。

crontab -e 設定は特定のユーザー用ですが、/etc/crontab の編集はシステム タスク用です。

スケジュールされたタスクを表示する

crontab -l //現在スケジュールされているすべてのタスクを一覧表示します

crontab -l -u jp // ユーザー jp のすべてのスケジュールされたタスクを一覧表示します

タスクスケジューラを削除する

crontab -r //すべてのタスクスケジュールジョブを削除する

vim /etc/crontab を直接編集します。デフォルトのファイル形式は次のとおりです。

シェル=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=ルート
ホーム=/

# 詳細については 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
# | | | | |
# * * * * * ユーザー名 実行するコマンド

このテキストの説明は非常に直感的です。

アスタリスク (*): すべての可能な値を表します。たとえば、月フィールドにアスタリスクが含まれている場合、他のフィールドの制約が満たされた後、毎月コマンド操作が実行されることを意味します。

カンマ(,):カンマで区切られた値のリスト範囲を指定できます。例:"1,2,5,7,8,9"

中央バー (-): 整数間の中央バーを使用して整数の範囲を表すことができます。たとえば、「2-6」は「2,3,4,5,6」を意味します。

スラッシュ (/): スラッシュを使用して時間間隔の頻度を指定できます。たとえば、「0-23/2」は 2 時間ごとに実行されることを意味します。同時に、スラッシュはアスタリスクと一緒に使用できます。たとえば、分フィールドで */10 を使用すると、10 分ごとに実行されることを意味します。

以下に、基本的に一般的な状況を網羅した例をいくつか示します。

例1

: : : : : : : : : : : : : : :
# 毎日 4:22 に /etc/cron.daily ディレクトリ内のすべての実行可能ファイルを root として実行します。run-parts パラメータは、次のディレクトリ内のすべての実行可能ファイルが実行されることを示します。

例2

#毎晩21:30にApacheを再起動する
30 21 * * * /usr/local/etc/rc.d/lighttpd を再起動
#毎月1日、10日、22日の4:45にApacheを再起動する
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpdを再起動
#毎週土曜日と日曜日の1:10にApacheを再起動する
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpdを再起動
#毎日18:00から23:00まで30分ごとにApacheを再起動します
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd 再起動
#毎週土曜日の午後11時にApacheを再起動する
0 23 * * 6 /usr/local/etc/rc.d/lighttpdを再起動
#午後11時から午前7時まで1時間ごとにApacheを再起動します
0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd 再起動
#1時間ごとにApacheを再起動する
0 */1 * * * /usr/local/etc/rc.d/lighttpd を再起動
#毎月4日と毎週月曜から水曜の11時にApacheを再起動します
0 11 4 * 月〜水 /usr/local/etc/rc.d/lighttpd 再起動
#1月1日4時にApacheを再起動
0 4 1 jan * /usr/local/etc/rc.d/lighttpd を再起動
#30分ごとに時間を同期する 0/30 * * * * /usr/sbin/ntpdate 210.72.145.44

知らせ

* *1 * * * このコマンドは、毎時間ごとに 1 分ごとに実行されることを意味します。

実行する各時間の分数を指定する必要があります。つまり、最初の * を数字に変更する必要があります。

* は 1 分ごとに表されるからです。

/1 と hour の間に違いはありません。どちらも 1 時間に 1 回です。

*/2 と設定した場合、タイミング設定開始から 2 時間後ではなく、2 で割り切れる時間数後に実際に実行されます。例えば、9 時に設定した場合、10 時に実行されます。

最後に、次のような問題が発生する可能性があります。

表示するには、rootユーザーとしてcrontab -lと入力します。

root 用の crontab はありません。例:

[root@CentOS ~]# crontab -l

ルート用のcrontabがない

この問題は非常に簡単です。また、root ユーザーとして crontab -e と入力します。

Escキーを押します。wq Enterキーを押します。

crontab -lと入力しても問題はありません

主な理由は、この Linux サーバーが crontab を使用するのは今回が初めてであり、対応するファイルがまだ生成されていないことです。編集 (crontab -e) を実行すると、このファイルが生成されます。

Linux CentOS でスケジュールされたスクリプトを構成する方法は以上です。これが参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • CentOS で指定されたスクリプトを実行するスケジュールされたタスクを設定する方法
  • CentOS7 スケジュールされたタスクの設定
  • Linux CentOS で crontab を使用してスケジュールされた再起動を設定する方法
  • Linux crontab スケジュールタスクの設定方法(詳細説明)

<<:  Node.js での組み込みモジュールとカスタムモジュールの実装

>>:  MySQL共通ストレージエンジンの機能と使用方法の詳細な説明

推薦する

Linux ソフトウェアのインストール場所を確認する簡単な方法

1. ソフトウェアのインストールパスを確認します。 Linuxソフトウェアをインストールできる場所は...

JavaScript の構造化代入の一般的なシナリオと例 5 つ

目次序文1. データを抽出する2. エイリアス値3. 動的プロパティ4. オブジェクトの分解における...

MySQL での GROUP_CONCAT の使用例の分析

この記事では、例を使用して、MySQL で GROUP_CONCAT を使用する方法について説明しま...

Tomcatでcatalina.batがUTF-8に設定されている場合、コンソールに文字化けした文字が表示されます

1. catalina.bat は UTF-8 に設定する必要があります。UTF-8 に設定しないと...

vmware workstation12 インストール CentOS プロンプト VMware Player と Device/Credential Guard に互換性がない、理由と解決策

最新バージョンの WIN10 では、Microsoft は仮想化コンテナに基づくセキュリティ メカニ...

docker compose idea CreateProcess error=2 システムは指定されたファイルを見つけることができません

Docker の作成Compose の紹介Compose は、マルチコンテナ Docker アプリケ...

Vue はコンポーネント間の通信をどのように実装しますか?

目次1. 父と息子のコミュニケーション1.1 親コンポーネント --> 子コンポーネント1.2...

初心者向けのHTMLタグネストルールの詳細なまとめ

最近、HTML を再度学習しており、これは HTML に対する新たな理解と言えます。これを過小評価し...

Linux環境でグラフデータベースneo4jを構築する方法の説明

Neo4j (Nosql の 1 つ) は、高性能なグラフ データベース (分散をサポートしていませ...

ポップアップ効果を実現するにはjsを使用します

この記事の例では、ポップアップ効果を実現するためのjsの具体的なコードを参考までに共有しています。具...

Dockerでイメージを削除する方法

dockerでイメージを削除するコマンドはdocker rmiですが、このコマンドを実行してもイメー...

CentOS7 デプロイメント Flask (Apache、mod_wsgi、Python36、venv)

1. Apacheをインストールする # yum インストール -y httpd httpd-de...

SQL における参照整合性の詳細な説明 (1 対 1、1 対多、多対多)

1. 参照整合性参照整合性とは、主に外部キー制約を使用した複数のテーブル間の設計を指します。複数テ...

Linux ログ内のキーワードとその前後の情報を検索する方法の例

日常業務では、ログを表示する必要がよくあります。たとえば、 tail コマンドを使用してログをリアル...

MySql データベースにリモートでログインするにはどうすればよいですか?

はじめに: プロジェクトを開発するために、サーバーに MySql データベース サーバーを展開し、ロ...