cronで「ソース」を使用できませんか?

cronで「ソース」を使用できませんか?

を使用するには、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それはsourcebashism(または他のより複雑なシェル)です。持ち運べる、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

また、私が知っている限り、バックグラウンドで購入を行うことは意味がないので、に変更しました&&&

おすすめ記事