2016-05-03 20 views
8

ho cercato di eseguire un job cron all'interno di un contenitore finestra mobileCome eseguire un job cron all'interno di un contenitore finestra mobile

ma non funziona niente per me

mio contenitore avere solo cron.daily e il file cron.weekly

crontab, cron.d, cron.hourly ... sono assenti nel mio container

crontab -e anche non funzionante

mio contenitore corre con/bin/bash

+0

Hai letto una qualsiasi delle pagine di documentazione o man su cron (8), crontab (1) o crontab (5)? Cosa ti fa pensare che hai bisogno di crontab (1) comunque? Puoi modificare il tuo crontab (5) senza e solo HUP cron (8). In alternativa, crea la tua immagine con quelle aggiunte. Dato che non sono sicuro di aver fatto anche la ricerca più elementare, non sono propenso a elencare questi passaggi, tranne che per il suggerimento di leggere su Dockerfiles. – Marakai

risposta

36

Ecco come eseguire uno dei miei contenitori cron.

Dockerfile:

FROM alpine:3.3 

ADD crontab.txt /crontab.txt 
ADD script.sh /script.sh 
COPY entry.sh /entry.sh 
RUN chmod 755 /script.sh /entry.sh 
RUN /usr/bin/crontab /crontab.txt 

CMD ["/entry.sh"] 

crontab.txt

*/30 * * * * /script.sh >> /var/log/script.log 

entry.sh

#!/bin/sh 

# start cron 
/usr/sbin/crond -f -l 8 

script.sh

#!/bin/sh 

# code goes here. 
echo "This is a script, run by cron!" 

costruire in questo modo

docker build -t mycron . 

Run in questo modo

docker run -d mycron 

Aggiungere i propri script e modificare il crontab.txt e proprio costruire l'immagine ed eseguire. Poiché si basa su alpine, l'immagine è super piccola.

+0

Thx per la soluzione! Funziona benissimo per il mio caso d'uso. –

+0

Non riesco a revocarlo abbastanza. Ho provato tanti modi diversi per far funzionare cron nella finestra mobile, è ridicolo. Il problema è che c'è zero output quando qualcosa va storto, ma la tua soluzione lo esegue correttamente in primo piano e registra i problemi! Grazie! – Sarke

6

grazie per questo modello.

mi chiedo solo una riga in entry.sh

/usr/sbin/crond -f -L 8

crond rendimenti -help:

Usage: crond -fbS -l N -d N -L LOGFILE -c DIR 

     -f  Foreground 
     -b  Background (default) 
     -S  Log to syslog (default) 
     -l N Set log level. Most verbose:0, default:8 
     -d N Set log level, log to stderr 
     -L FILE Log to FILE 
     -c DIR Cron dir. Default:/var/spool/cron/crontabs 

così forse si voleva mettere piuttosto il piccolo l

/usr/sbin/crond -f -l 8

istead del grande 'L'

/usr/sbin/crond -f -L 8

per impostare il livello di log di default, perché specificando un file di registro denominato 8 non sembra essere previsto.

0

crond funziona bene con tiny sulla alpino

RUN apk add --no-cache tini 

ENTRYPOINT ["/sbin/tini", "--"] 
CMD ["/usr/sbin/crond", "-f"] 

ma non dovrebbe essere eseguito come contenitore principale processo (PID 1) per raccogliere zombie problema e problemi con la gestione dei segnali. Vedi this Docker PR e this blog post per i dettagli.

+1

Perché non dovrebbe essere eseguito come PID1? –

Problemi correlati