Armadilloフォーラム

電源投入時に作成したプログラムを起動したい

sai

2023年1月16日 14時48分

A6Eでゲートウェイコンテナイメージを改変してプログラムを作成しました。
コンテナ内で手動で動作するようになったので、起動時に自動で実行されるようにしたいと思っています。

/etc/atmark/containers/a6e-gw-container.conf に set_command sh /usr/bin/gw-app.sh という記述があるので、コンテナ内の /usr/bin/gw-app.sh を作成したプログラムが起動するよう書き換えました。
これ自体はコンテナの中で実行して動作することを確認しています。

しかし、コンテナを抜けた後でコンテナの停止、起動としても設定したプログラムが動作しません。

コンテナ内で作成したプログラムを電源投入時に自動で実行するためにはどのようにすれば良いのでしょうか?

コメント

at_takumi.mizutani

2023年1月16日 15時17分

水谷です。

> /etc/atmark/containers/a6e-gw-container.conf に set_command sh /usr/bin/gw-app.sh という記述があるので、コンテナ内の /usr/bin/gw-app.sh を作成したプログラムが起動するよう書き換えました。
> これ自体はコンテナの中で実行して動作することを確認しています。
>
> しかし、コンテナを抜けた後でコンテナの停止、起動としても設定したプログラムが動作しません。

コンテナ内の変更はコンテナを停止すると変更結果が失われてしまいます。
コンテナの変更を保存する方法については、Armadillo-IoTゲートウェイ A6E 製品マニュアル「10.3.2.5. コンテナの変更を保存する」(https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…)をご参照ください。

> コンテナ内で作成したプログラムを電源投入時に自動で実行するためにはどのようにすれば良いのでしょうか?

また、コンテナの設定ファイルに適用した変更は Armadillo-IoT A6Eの電源を落とすと変更が消えてしまいます。
そのため、persist_fileコマンドにて以下のように変更内容を保存する必要が有ります。

persist_file /etc/atmark/containers/a6e-gw-container.conf

以上2点、ご確認頂けますと幸いです。
よろしくお願いいたします。

ご返信ありがとうございます。
どちらも実施しており、電源再投入後もファイルの内容が変わっていないことを確認しています。

at_takumi.mizutani

2023年1月16日 17時45分

> ご返信ありがとうございます。
> どちらも実施しており、電源再投入後もファイルの内容が変わっていないことを確認しています。

ご確認いただきありがとうございます。
それでは、以下2点についてご確認頂けますでしょうか。

1. コンテナを起動した状態で "podman ps" コマンドを実行し、"set_command sh /usr/bin/gw-app.sh"から書き換えたコマンドが "COMMAND" の行に表示されているか。

2. 作成して配置していただいたプログラムにログ出力を行うようにして頂き、以下のコマンドを実行した場合にそのログが出力されるか。

podman logs a6e-gw-container

以上、ご確認の程よろしくお願いいたします。

ご返信ありがとうございます。

> 1. コンテナを起動した状態で "podman ps" コマンドを実行し、"set_command sh /usr/bin/gw-app.sh"から書き換えたコマンドが "COMMAND" の行に表示されているか。

sleep infinity が表示されています。

/etc/atmark/containers/a6e-gw-container.conf に以下を記述しています。

set_command sh /usr/bin/gw-app.sh
set_command sleep infinity

> 2. 作成して配置していただいたプログラムにログ出力を行うようにして頂き、以下のコマンドを実行した場合にそのログが出力されるか。

申し訳ありません。ログ出力が何をすれば良いのか分かりません。
コンフィグ設定のログ出力であれば変更していないのでTrueになっていると思います。
コマンドを実行しても何も表示されませんでした。

at_takumi.mizutani

2023年1月17日 11時39分

> > 1. コンテナを起動した状態で "podman ps" コマンドを実行し、"set_command sh /usr/bin/gw-app.sh"から書き換えたコマンドが "COMMAND" の行に表示されているか。
>
> sleep infinity が表示されています。
>
> /etc/atmark/containers/a6e-gw-container.conf に以下を記述しています。

set_command sh /usr/bin/gw-app.sh
set_command sleep infinity

ご確認いただきありがとうございます。

ご記載頂いた "a6e-gw-container.conf"では、一番下の行の "set_command sleep infinity" が実行されているため、"podman ps" コマンドでも "sleep infinity" が表示されます。
そのため、以下の手順を実行してみて下さい。

1. "podman stop a6e-gw-container" を実行し、コンテナを停止する。
2. "set_command sh /usr/bin/gw-app.sh" の部分を作成したプログラムを実行するコマンドに変更する。
3. "set_command sleep infinity" の行をコメントアウトする。
4. "podman_start a6e-gw-container" を実行し、コンテナを起動する。

set_command <作成したプログラムを実行するコマンド>
# set_command sleep infinity

以上、ご確認の程よろしくお願いいたします。

a6e-gw-container.confファイルは以下のように書き換えました。

#set_command sh /usr/bin/gw-app.sh
#set_command sleep infinity
set_command python3 /root/diocont/diocont_sub.py

以下実行結果です。

armadillo:~# podman stop a6e-gw-container
a6e-gw-container
armadillo:~# vi /etc/atmark/containers/a6e-gw-container.conf
armadillo:~# persist_file /etc/atmark/containers/a6e-gw-container.conf
armadillo:~# podman start a6e-gw-container
armadillo:~# podman ps
CONTAINER ID  IMAGE                     COMMAND         CREATED      STATUS            PORTS       NAMES
2141ceaee37c  localhost/diocont:v0.0.5  sleep infinity  2 hours ago  Up 9 minutes ago              a6e-gw-container

消したはずのsleep infinityが表示されています。

at_takumi.mizutani

2023年1月17日 13時07分

> a6e-gw-container.confファイルは以下のように書き換えました。

#set_command sh /usr/bin/gw-app.sh
#set_command sleep infinity
set_command python3 /root/diocont/diocont_sub.py

> 以下実行結果です。

armadillo:~# podman stop a6e-gw-container
a6e-gw-container
armadillo:~# vi /etc/atmark/containers/a6e-gw-container.conf
armadillo:~# persist_file /etc/atmark/containers/a6e-gw-container.conf
armadillo:~# podman start a6e-gw-container
armadillo:~# podman ps
CONTAINER ID  IMAGE                     COMMAND         CREATED      STATUS            PORTS       NAMES
2141ceaee37c  localhost/diocont:v0.0.5  sleep infinity  2 hours ago  Up 9 minutes ago              a6e-gw-container

> 消したはずのsleep infinityが表示されています。

ご確認いただきありがとうございます。
ご記載いただいた部分のa6e-gw-container.confについては問題ないと思いますが、
実行結果の"podman start a6e-gw-container"の部分で、"podman_start"のアンダーバーが抜けているようです。
お手数ですが、再度 "podman stop a6e-gw-container"(こちらはアンダーバー不要)にて停止した後、"podman_start a6e-gw-container" にて再起動してみて下さい。

以上、よろしくお願いいたします。

ありがとうございます。

> お手数ですが、再度 "podman stop a6e-gw-container"(こちらはアンダーバー不要)にて停止した後、"podman_start a6e-gw-container" にて再起動してみて下さい。

設定したプログラムは動作しました。

実際には2つ起動したいので以下のように書きかえてみたのですが、動いているのは最後に書いた方のみでした。

set_command python3 /root/diocont/diocont_sub.py
set_command python3 /root/diocont/diocont_pub.py

at_takumi.mizutani

2023年1月17日 17時53分

> 設定したプログラムは動作しました。
>
> 実際には2つ起動したいので以下のように書きかえてみたのですが、動いているのは最後に書いた方のみでした。

set_command python3 /root/diocont/diocont_sub.py
set_command python3 /root/diocont/diocont_pub.py

2つのプログラムを同時に実行する場合は、コンテナ内に以下のようなシェルスクリプトを作成して頂き、そのシェルスクリプトをset_commandから実行してみて下さい。

#!/bin/sh
python3 /root/diocont/diocont_sub.py & python3 /root/diocont/diocont_pub.py

以上、よろしくお願いいたします。

ありがとうございます。

シェルスクリプトの内容を教えて頂いたものに変更しただけでは動かなかったのですが、a6e-gw-container.confファイルのsleep infinityの行をコメントにしたところ動きました。

set_command sh /usr/bin/gw-app.sh
#set_command sleep infinity

結果的には、a6e-gw-container.confファイルに "set_command sleep infinity" があったためシェルスクリプトが動かなかったというように見えます。

アットマークテクノの古賀です。

sai さん:
>ありがとうございます。
>
>シェルスクリプトの内容を教えて頂いたものに変更しただけでは動かなかったのですが、a6e-gw-container.confファイルのsleep infinityの行をコメントにしたところ動きました。

無事動作したということで、安心しました。

set_command sh /usr/bin/gw-app.sh
#set_command sleep infinity

>結果的には、a6e-gw-container.confファイルに "set_command sleep infinity" があったためシェルスクリプトが動かなかったというように見えます。

はい。これについては、水谷からコメントした通りです:
 https://armadillo.atmark-techno.com/forum/armadillo/14070#comment-12398

>ご記載頂いた "a6e-gw-container.conf"では、一番下の行の "set_command sleep infinity" が実行されているため…

/etc/atmark/containers/ の .conf ファイルに複数の set_command 行が存在している場合、最後の行だけが有効になります。コメントアウトされる前は、set_command 行が二行ありましたので、後の方の 'set_command sleep infinity' が有効になっていた、ということです。

ご回答ありがとうございます。

> /etc/atmark/containers/ の .conf ファイルに複数の set_command 行が存在している場合、最後の行だけが有効になります。コメントアウトされる前は、set_command 行が二行ありましたので、後の方の 'set_command sleep infinity' が有効になっていた、ということです。

set_command は最後の1行のみ有効になるとのこと。納得致しました。
ありがとうございます。