AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 453006
Accepted
ctrl-alt-delor
ctrl-alt-delor
Asked: 2018-07-03 03:21:09 +0800 CST2018-07-03 03:21:09 +0800 CST 2018-07-03 03:21:09 +0800 CST

Obtendo o cron para trabalhar no docker

  • 772

Estou usando nginxno docker. Configurei crontrabalhos para atualizar certificados SSL e registro de DNS. No entanto, os crontrabalhos não estão em execução.

O que eu fiz. Eu criei um Dockerfilebaseado arm32v7/nginxneste estagiário é baseado em debian:stretch-slim. No começo eu instalei cron, e assumi que ele seria executado, mas descobri que o serviço não foi iniciado (não há subsistema init instalado, debian:stretch-slim é muito mínimo). Então eu adicionei código para iniciar cron. Agora, se eu perguntar ao contêiner se cronestá em execução, ele diz que sim.

#ctrl-alt-delor@raspberrypi:~/a_website/docker$
#↳ docker exec -it $(docker container ls | sed -nr -e 's/.*(website-stack.*)/\1/p') service cron status
[ ok ] cron is running.

No entanto, não estou vendo nenhum log da tarefa que adicionei cron.

Se eu executar run-parts --report /etc/cron.daily, minhas tarefas serão executadas e produzirão uma saída de log. Portanto, ainda aparece como se cronnão estivesse em execução.

#ctrl-alt-delor@raspberrypi:~/a_website/docker$
#↳ docker exec -it $(docker container ls | sed -nr -e 's/.*(website-stack.*)/\1/p') cat /proc/12/cmdline; echo
/usr/sbin/cron

Então, por que cronnão está executando seus trabalhos? O que eu perdi?

Dockerfile

FROM arm32v7/nginx

##add backports
COPY stretch-backports-source.list /etc/apt/sources.list.d/

##install cron and curl — so we can register dns regularly
RUN     apt-get update &&\
        apt-get install -y cron curl &&\
        apt-get clean

##setup cron to register dns
COPY register-dns register-dns.auth register-dns-hostname /usr/local/bin/
COPY register-dns.cron /etc/cron.daily/1-register-dns
RUN chmod +x /usr/local/bin/register-dns /etc/cron.daily/1-register-dns

##add curtbot
RUN apt-get update && \
    apt-get -t stretch-backports install -y python-certbot-nginx && \
    apt-get clean


#add ssl port
EXPOSE 443 80

##custom entry point — needed by cron
COPY entrypoint /entrypoint
RUN chmod +x /entrypoint
ENTRYPOINT ["/entrypoint"]
CMD ["nginx", "-g", "daemon off;"] #:tricky: we seem to need to re-specify this

LABEL name="my-nginx" \
      description="nginx + cron + curl + certbot + dns-registering"

entrypoint

#!/bin/sh

## Do whatever you need with env vars here ...
service cron start

# Hand off to the CMD
exec "$@"

/etc/crontab

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

/etc/cron.daily/1-register-dns

#!/bin/sh
date >> /var/log/register-dns
/usr/local/bin/register-dns >>/var/log/register-dns
docker cron
  • 1 1 respostas
  • 29138 Views

1 respostas

  • Voted
  1. Best Answer
    ctrl-alt-delor
    2018-07-03T07:25:51+08:002018-07-03T07:25:51+08:00

    Eu instalei rsyslogpara ver quais erros eu estava recebendo, recebi o seguinte

    (*system*) NUMBER OF HARD LINKS > 1 (/etc/crontab). Um pouco de pesquisa me disse que crontem uma política de segurança para não funcionar se houver muitos links físicos para seus arquivos. Infelizmente, o sistema de arquivos em camadas do Docker faz com que os arquivos tenham muitos links físicos.

    Para corrigi-lo, adicionei touch /etc/crontab /etc/cron.*/*, ao script de inicialização, antes de executar cron. Isso se desconecta se das outras instâncias de arquivo.

    O novo ponto de entrada é

    #!/bin/sh
    
    #fix link-count, as cron is being a pain, and docker is making hardlink count >0 (very high)
    touch /etc/crontab /etc/cron.*/*
    
    service cron start
    
    # Hand off to the CMD
    exec "$@"
    

    ja testei e funciona

    Resumo

    Para chegar cronao trabalho, você terá que.

    • Instalar cron— se não estiver instalado
    • Adicione cron job a /etc/cron.daily/(ou semanalmente). Certifique-se de que seu nome de script tenha apenas letras, números, hífens, sem pontos . (Não pergunte) veja o cron job não sendo executado no cron.daily
    • Reduza a contagem de hardlink dos cronarquivos de configuração s para um: do touch /etc/crontab /etc/cron.*/*— (se estiver no docker). Coloquei no script de inicialização.
    • Start cron: service cron start— (Se em um sistema operacional básico, sem init. Como em muitas imagens de base para uso no docker). Eu coloquei no script de inicialização.

    O script de ponto de entrada desta resposta e tudo o mais da pergunta farão isso. O projeto atual pode ser obtido comhg clone ssh://hg@bitbucket.org/davids_dad/a_website

    • 16

relate perguntas

  • Cron */6 horas mas com offset?

  • Como recuperar crontab excluído

  • Como instalo o docker no RHEL 7 offline?

  • Preciso executar este arquivo de script apenas uma vez?

  • Auto-SSH funciona manualmente, mas não em segundo plano

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve