
私はついていきますこれガイドを私の 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 が実際には実行されていなかっただけなのです。