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
> ご返信ありがとうございます。
> どちらも実施しており、電源再投入後もファイルの内容が変わっていないことを確認しています。
ご確認いただきありがとうございます。
それでは、以下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
> > 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
> 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
> 設定したプログラムは動作しました。
>
> 実際には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
以上、よろしくお願いいたします。
koga
アットマークテクノの古賀です。
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' が有効になっていた、ということです。
sai
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コマンドにて以下のように変更内容を保存する必要が有ります。
以上2点、ご確認頂けますと幸いです。
よろしくお願いいたします。