Armadilloフォーラム

crond をコンテナ起動時に実行するとコンテナが停止してしまう

new_bee

2025年6月9日 16時30分

==========
製品型番:A6E
Debian/ABOSバージョン:3.21.3-at.7.20250528
カーネルバージョン:5.10.237-0-at
3G/LTE モジュール情報 (Debianのみ):
その他:
==========
いつもお世話になっております。

現在コンテナ内のPythonファイルを定期実行したくcrond を導入しました。
コンテナ内でcron を起動すると問題なく定期実行されmain.pyが動作するのですが
コンテナインストール時にdocker file にて以下を書き込み実行したところコンテナが即終了してします状況に陥っています。

RUN echo "* * * * * /usr/bin/python3 /vol_app/src/py/main.py" > /etc/crontabs/root
CMD ["crond", "-f"]

crontab の書き込みまでは問題なく実行できており
CMD ["crond", "-f"]実行時にこけてループしています。

またapp.confのほうでも以下のshを作成しシェルでのcrondの起動をためしてみましたがうまくいかない状況です。

while [ ! -f /vol_app/src/py/main.py ]; do
    sleep 1
done
 
echo "* * * * * /usr/bin/python3 /vol_app/src/py/main.py" > /etc/crontabs/root
crond -f -l info

初歩的質問で申し訳ありませんが御助力いただけると助かります。

コメント

at_satoshi.ohta

2025年6月9日 17時03分

太田です。

すみません。
手元で試したいのですが、

> 現在コンテナ内のPythonファイルを定期実行したくcrond を導入しました。

とのことですが、ひとまず確認として、apt-get install cron で導入したということでよろしいでしょうか?

太田様
お世話になっております。
>とのことですが、ひとまず確認として、apt-get install cron で導入したということでよろしいでしょうか?
dcron をパッケージに書き込んでAlpineで実行しております。
コンテナを起動する際に使用している設定ファイル3点を添付いたします。

お手数ですが確認の程よろしくお願い致します。

ファイル ファイルの説明
app.conf.txt
Dockerfile.txt
packages.txt

at_satoshi.ohta

2025年6月9日 18時14分

太田です。

ATDE上で以下の方法を試していただけますでしょうか?
ここでは作成したプロジェクト名を my_project とします。

1. ABOSDE の左サイドバーから OPENED PROJECT > my_project > container > etc > crontabs > root を開き、「Save file」ボタンを押す。
2. my_project/container/resources/etc/contabs/root に以下を追記

* * * * * /usr/bin/python3 /vol_app/src/py/main.py

3. my_project/app/src/sh/main.sh の内容を以下のようにする

#!/bin/bash -e
必要であれば前処理
 
crond
sleep infinity

5. my_project/config/app.conf に以下を追記

set_command bash /vol_app/src/sh/main.sh

4. [Generate development swu] または [Generate release swu]を実行
5. 作成した SWU イメージをインストール

上記の手順を試していただければ幸いです。
どうぞよろしくお願いいたします。

太田様

お世話になっております。
早急の回答ありがとうございます。
ご教授いただいた手順を実行したところ問題なく起動させることが出来ました。
Alpineはデフォルトでdcronは使えるようですね
新たに私が入れ直したのが原因でしょうか?
基本的にはデフォルトの設定値に追加、修正すればよろしいでしょうか?

>
> ATDE上で以下の方法を試していただけますでしょうか?
> ここでは作成したプロジェクト名を my_project とします。
>
> 1. ABOSDE の左サイドバーから OPENED PROJECT > my_project > container > etc > crontabs > root を開き、「Save file」ボタンを押す。
> 2. my_project/container/resources/etc/contabs/root に以下を追記
>

> * * * * * /usr/bin/python3 /vol_app/src/py/main.py
> 

> 3. my_project/app/src/sh/main.sh の内容を以下のようにする
>

> #!/bin/bash -e
> 必要であれば前処理
> 
> crond
> sleep infinity
> 

> 5. my_project/config/app.conf に以下を追記
>

> set_command bash /vol_app/src/sh/main.sh
> 

> 4. [Generate development swu] または [Generate release swu]を実行
> 5. 作成した SWU イメージをインストール
>
> 上記の手順を試していただければ幸いです。
> どうぞよろしくお願いいたします。

at_satoshi.ohta

2025年6月10日 7時54分

太田です。

> ご教授いただいた手順を実行したところ問題なく起動させることが出来ました。
> Alpineはデフォルトでdcronは使えるようですね

問題なく出来て何よりです。
そうみたいですね。

> 新たに私が入れ直したのが原因でしょうか?

頂いた app.conf を見る限りでは、app.conf に set_command を設定していなかったので何もせずにコンテナが終了しているようです。
ここでは、/vol_app/src/sh/main.sh を実行するように記述し、main.sh では crond を実行して、コンテナが終了しないように sleep infinity を実行しました。

> 基本的にはデフォルトの設定値に追加、修正すればよろしいでしょうか?

はい。それでいいと思います。

また、おせっかいですが、頂いた Dockerfile について

RG ARCH
FROM docker.io/${ARCH}/alpine:latest
LABEL version="2.0.0"
ARG PRODUCT  ★
COPY resources [r]esources_${PRODUCT} /  ★
ARG PACKAGES ★
RUN apk update && apk upgrade \ ★
&& apk add --no-cache ${PACKAGES}  ★
 
 
# Add apt download source information
COPY resources/etc/apt /etc/apt/
 
# Add extra packages to containers/packages.txt
ARG PACKAGES
RUN apk update && apk upgrade \
&& apk add --no-cache ${PACKAGES} 
 
:(省略)
 
ARG PRODUCT
COPY resources [r]esources_${PRODUCT} /
 
:(省略)

★の部分は以降で行っているので必要ないと思われます。
試してみていただければ幸いです。

どうぞよろしくお願いいたします。

太田様

お世話になっております。

>頂いた app.conf を見る限りでは、app.conf に set_command を設定していなかったので何もせずにコンテナが終了しているようです。
>ここでは、/vol_app/src/sh/main.sh を実行するように記述し、main.sh では crond を実行して、コンテナが終了しないように sleep infinity を実行しまし
>た。

私の実行していたshではcrondを起動後に sleep infinity を記載していなかったためコンテナが数秒おきに再起動していたようです。
実行していたshに sleep infinity を追加したらコンテナが終了しなくなりました。
原因はこれだったようです。
ありがとうございます。

>★の部分は以降で行っているので必要ないと思われます。
>試してみていただければ幸いです。

削除して問題なく動作いたしました。
試していた際に散らかってしてしまいました。

いろいろご教授いただきありがとうございました。