cron を Docker コンテナ上で実行しようとするとエラーが発生します。何か見落としている点はありますか?

cron を Docker コンテナ上で実行しようとするとエラーが発生します。何か見落としている点はありますか?

私はついていきますこれガイドを私の unRAID サーバー (siwatinc/ubuntu-playground) 内の Docker コンテナーにインストールし、正常に動作させました。UbuntuPlayground という Docker イメージに cron をインストールしたところ、ガイドのすべての内容は cron タスクが失敗するまで正常に動作しました。問題を調べたところ、Docker イメージに systemd (実際は何なのかわかりません) がないため実行されていないため、cron を動作させるには特別なものをダウンロードする必要があるのではないかと思います。そこで、その件から先に進みました。しかし、Docker コンテナーの bash で次のコマンドを実行すると:

docker exec -it UbuntuPlayground bash

シェル スクリプトが配置されているホーム ディレクトリから ./speedtest.sh を実行すると、インターネット上でスピードテストが実行され、Google Drive にアップロードされます。また、docker イメージを残して unraid サーバーの SSH から次のコマンドを実行すると、次のこともわかりました。

docker exec -it UbuntuPlayground /root/speedtest.sh

コードは正常に実行されます。Google ドライブでスピードテストの結果も確認できます。そこで、そのコマンドを実行するために unraid で cronjob を作成してみました。そこで、cron を次のようにテストしました。

0 * * * * docker exec -it UbuntuPlayground /root/speedtest.sh

数時間実行させて確認しましたが、動作しませんでした。そこで、ホスト上でコマンドを実行するシェル スクリプトを作成してみました。内容は次のとおりです。

#!/bin/bash
docker exec -it UbuntuPlayground /root/speedtest.sh

それは単に speedtest.sh と呼ばれます。そこで、speedtest.sh を crontab に追加しました。

0 * * * * /root/speedtest.sh

その後、寝ると/var/log/syslogにこの問題が発生しました

Nov  3 21:00:01 TrevNas2 sudo:     root : TTY=unknown ; PWD=/root ; USER=root ; COMMAND=/usr/bin/docker exec -it UbuntuPlayground /root/speedtest.sh
Nov  3 21:00:01 TrevNas2 crond[1861]: exit status 1 from user root /root/speedtest.sh
Nov  3 21:00:06 TrevNas2 sSMTP[26673]: Creating SSL connection to host
Nov  3 21:00:06 TrevNas2 sSMTP[26673]: SSL connection using TLS_AES_256_GCM_SHA384
Nov  3 21:00:07 TrevNas2 sSMTP[26673]: Authorization failed (534 5.7.9  https://support.google.com/mail/?p=InvalidSecondFactor j79sm5194000ywj.11 - gsmtp)
Nov  3 21:00:07 TrevNas2 crond[1861]: exit status 1 from user root /usr/local/sbin/mover &> /dev/null
Nov  3 22:00:01 TrevNas2 sudo:     root : TTY=unknown ; PWD=/root ; USER=root ; COMMAND=/usr/bin/docker exec -it UbuntuPlayground /root/speedtest.sh
Nov  3 22:00:01 TrevNas2 crond[1861]: exit status 1 from user root /root/speedtest.sh
Nov  3 22:00:06 TrevNas2 sSMTP[21643]: Creating SSL connection to host
Nov  3 22:00:06 TrevNas2 sSMTP[21643]: SSL connection using TLS_AES_256_GCM_SHA384
Nov  3 22:00:07 TrevNas2 sSMTP[21643]: Authorization failed (534 5.7.9  https://support.google.com/mail/?p=InvalidSecondFactor x64sm4861319ywb.55 - gsmtp)
Nov  3 22:00:12 TrevNas2 crond[1861]: exit status 1 from user root /usr/local/sbin/mover &> /dev/null

つまり、終了コード 1 で失敗しています。これの何が問題なのかわかりません。これは私の理解を超えた問題だと思いました。終了コード 1 を Google で検索しましたが、何も見つかりません。実行中の cron で docker コンテナの問題を修正するべきでしょうか、それともホスト マシンの cron の問題を修正するべきでしょうか。または、どちらかを修正する方法を知っている人はいますか。

ここまで読んでくださった方、ありがとうございます。

答え1

dockerコンテナで動作しない理由が分かりました。cronが内部で実行されていませんでした。これstack exchange 次のコマンドを実行する必要があることがわかりました:

/etc/init.d/cron start

その後、1分ごとにファイルにアクセスする基本的なcrontaskをテストし、動作を確認した後、

*/30 * * * * /root/speedtest.sh

もう一度 crontab に入力すると、最後に実行されたスピードテストを確認できます。つまり、cron が実際には実行されていなかっただけなのです。

関連情報