Debian Dockerコンテナにcrontabスケジュールタスクを追加する

Debian Dockerコンテナにcrontabスケジュールタスクを追加する

現在、DockerイメージのほとんどはDebianベースです

# cat /etc/issue
Debian GNU/Linux 9 \n \l

Dockerコンテナはバックグラウンドサービスをサポートしていません。systemctl service crontabなどのバックグラウンドサービスは、

RUN systemctl start nginx

このようなソリューションを実装するには、それを開始するための独自のエントリポイント スクリプトを作成する必要があります。この記事では、Debian ベースの Docker コンテナでスケジュールされたタスクを設定する方法について説明します。

ケースの背景

フロントエンドプロジェクトをデプロイし、nginx イメージを使用しました。公式イメージは Debian ベースなので、Alpine と比べてサイズがあまり変わらないため、コンテナシステムには Debian を使用しました。

Dockerfileは次のようになります

nginx:1.15.10より
メンテナー Ryan Miao

コピーsources.list /etc/apt/sources.list
apt-get update && apt-get install -y net-tools procps curl wget vim telnet cron を実行、
  && apt-get autoremove && apt-get clean && rm -rf /var/lib/apt/lists/*

mkdir -p /data/log/nginx && mkdir -p /data/web && rm /etc/nginx/conf.d/default.conf を実行します。
default.conf を /etc/nginx/conf.d/ に追加します。
index.html /data/web/ を追加します。

clean_log.sh /data/ を追加します。
clean-cron をコピー /etc/cron.d/clean-cron
chmod 755 /data/clean_log.sh && crontab /etc/cron.d/clean-cron を実行します。

エントリポイント nginx && cron && /bin/bash

おそらく、cron をインストールし、次に nginx の設定を置き換え、静的ファイルをコピーし、最後に nginx を起動して cron を起動することになります。

時間制限のあるタスクが存在する理由を説明しましょう。スケジュールされたクリーンアップ スクリプトがあることがわかります。nginx 自体はログ処理モジュールを提供していないため、クリーンアップ スクリプトがあります。クリーンアップ スクリプトは定期的に実行する必要があるため、スケジュールされたタスクがあり、その後、Docker コンテナーがサービスをサポートしていないことがわかります。

一般的には、いくつかのステップがあります。

インストール

apt-get install cron

crontabに追加

crontab /etc/cron.d/your-crontab

docker の起動時に cron を開始する

ENTRYPOINT cron && xxxxx

ps、サイズが小さいため、画像マトリックスとして alpine を好む人はまだたくさんいます。しかし、この Linux コマンドは実に馴染みのないものです。

要約する

上記は、Debian Docker コンテナに crontab スケジュール タスクを追加する方法について紹介したものです。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • crontab でスケジュールされたタスクが実行されない理由の概要
  • Linux Crontab シェル スクリプトを使用して第 2 レベルのスケジュールされたタスクを実装する方法
  • Linux で crontab を使用してスケジュールされたタスクを 1 秒に 1 回実行する方法
  • Linuxでcrontabスケジュールタスクが実行されない理由
  • django-crontab を使用してスケジュールされたタスクを実装する例

<<:  MySQL 8.0.11 のインストールと設定方法のグラフィックチュートリアル

>>:  MySQL 8.0.12 winx64 解凍バージョンのインストール グラフィック チュートリアル

推薦する

Javascriptのtry catchの2つの機能についてお話しましょう

プログラムは上から下へ順番に実行され、いくつかの制御文によって実行経路を変更することができます。制御...

Linux seqコマンドの使い方の詳しい説明

01. コマンドの概要seq コマンドは整数のシーケンスを生成するために使用されます。 02. コマ...

CSS BEM 命名標準の概要 (推奨)

1 BEM命名標準とはBem は、ブロック、要素、修飾子の略語であり、Yandex チームによって...

MySQL のストアド プロシージャを使用して 100 万件のレコードをすばやく生成する方法

序文テストを行う際、大量のデータによる負荷に耐えるプロジェクトの能力をテストするために、通常はテスト...

YUM を使用して Linux (CentOS 7) に MySQL 5.7.18 をインストールする方法の詳細なチュートリアル

このプロジェクトでは MySQL を使用する必要があります。これまで Windows では常に確実に...

一般的なCSS3アニメーションの実装方法

1. 何ですかCSS アニメーションは、CSS を使用して拡張マークアップ言語 (XML) 要素をア...

MySQL データベースのパフォーマンス最適化の概要

目次なぜ最適化するのですか? ?どこから始めますか? ?解決策は何ですか? ? ?どうやって選ぶ? ...

MySQL 8.0.17 をインストールしてリモート アクセスを構成する方法

1. インストール前の準備データベースのバージョンを確認するコマンド: mysql --versio...

HTML と CSS の命名規則の概要

CSS命名規則 ヘッダー: ヘッダーコンテンツ: コンテンツ/含むフッターナビゲーション: navサ...

Linuxサービスの監視と運用および保守

目次1. psutilパッケージをインストールする次に、オペレーティングシステム内のすべてのサービス...

2列のデータをSQLの新しい列として操作する

以下のように表示されます。 bb_sbからa1、a2、a1+a2 a、a1*a2 b、a1*1.0/...

Vueはel-tableを使用して列と行を動的に結合します

この記事の例では、el-tableを使用して列と行を動的にマージするVueの具体的なコードを参考まで...

JS でタブ効果を書く

この記事の例では、タブ効果を記述するためのJSの具体的なコードを参考までに共有しています。具体的な内...

mysql インストーラ コミュニティ 8.0.12.0 インストール グラフィック チュートリアル

このチュートリアルでは、参考のためにmysqlインストーラコミュニティ8.0.12.0のインストール...

珍しいけれど役に立つJSテクニックをいくつか紹介します

序文プログラミング言語には通常、さまざまな隠されたトリックが含まれており、これらのトリックを上手に使...