Não é possível usar 'source' do cron?

3

Estou configurando um contêiner docker que requer um cronjob para fazer um backup usando awscli .

Estou tendo um problema com o trabalho cron sendo capaz de acessar as variáveis de ambiente do contêiner docker. Enquanto trabalho na inicialização, imprimo todas as variáveis de ambiente em um arquivo printenv > /env .

Quando eu tento usar source do cron job (eu tentei ambos diretamente no crontab e em um script chamado pelo crontab) ele não parece funcionar.

Eu fiz uma versão simplificada do meu projeto para demonstrar o problema (incluindo rsyslog para registro) :

Dockerfile:

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/*

crontab:

# 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

Quando inicio o contêiner, vejo que /env foi criado com minhas variáveis, mas nunca é originado.

    
por Philip Kirkbride 14.10.2017 / 15:42

1 resposta

2

Primeiro de tudo, o nome do comando (bem, shell builtin) é source . A menos que tenha escrito um script chamado source e colocado em / , você deseja source e não /source .

A próxima questão é que cron geralmente usa o que você tem como /bin/sh e source é uma base (ou outras camadas mais complexas). O comando compatível com POSIX portátil para obter um arquivo é . . Então, tente isso em vez de source :

*/3 * * * * root /usr/bin/env bash & . /env & aws s3 ls >> /test 2>&1

Além disso, eu não entendo muito bem o que isso deveria estar fazendo. Qual é o ponto de começar uma sessão bash e enviá-lo para o fundo? Se você quiser usar o bash para executar os comandos subseqüentes, será necessário:

*/3 * * * * root /usr/bin/env bash -c '. /env && aws s3 ls' >> /test 2>&1

Eu também alterei o & para && , já que o fornecimento no plano de fundo é inútil, até onde eu posso ver.

    
por 14.10.2017 / 15:46