を使用するには、cronjobが必要なDockerコンテナを設定していますawscli
。
cronジョブがdockerコンテナの環境変数にアクセスできないという問題があります。起動操作を実行するときは、すべての環境変数をファイルに印刷しますprintenv > /env
。
cronジョブで使用しようとするとsource
(crontabで直接試して、crontabで呼び出すスクリプトで試しましたが)動作しないようです。
問題を示すために、プロジェクトの単純化されたバージョンを作成しました。(rsyslog
ロギングに含まれる):
ドッカーファイル:
FROM debian:jessie
# Install aws and cron
RUN apt-get -yqq update
RUN apt-get install -yqq awscli cron rsyslog
# Create cron job
ADD crontab /etc/cron.d/hello-cron
RUN chmod 0644 /etc/cron.d/hello-cron
# Output environment variables to file
# Then start cron and watch log
CMD printenv > /env && cron && service rsyslog start && tail -F /var/log/*
予約されたもの:
# Every 3 minutes try to source /env and run `aws s3 ls`.
*/3 * * * * root /usr/bin/env bash & source /env & aws s3 ls >> /test 2>&1
コンテナを起動すると、/env
変数が作成されましたがインポートできないことがわかります。
ベストアンサー1
まず、コマンド(まあ、シェル組み込み)の名前はですsource
。というスクリプトを書いて、代わりに好きな場所にsource
入れない限り。/
source
/source
次の問題はcron
、一般的に持っているものを使用することです。/bin/sh
それはsource
bashism(または他のより複雑なシェル)です。持ち運べる、POSIX 互換コマンドソースファイルは.
次のとおりですsource
。
*/3 * * * * root /usr/bin/env bash & . /env & aws s3 ls >> /test 2>&1
さらに、私はそれが何をすべきかをよく理解していません。 Bashセッションを開始し、それをバックグラウンドで送信するためのポイントは何ですか? bashを使用して後続のコマンドを実行するには、次のものが必要です。
*/3 * * * * root /usr/bin/env bash -c '. /env && aws s3 ls' >> /test 2>&1
また、私が知っている限り、バックグラウンドで購入を行うことは意味がないので、に変更しました&
。&&