https://forums.docker.com/t/running-cronjob-in-debian-jessie-container/17527/7

dkoval Mar ‘17

=====

docker-compose.yml

  
version: '3.3'  
  
services:  
  gethpeers:  
    build:  
      context: gethpeers/  
    volumes:  
      - cronlog:/app/cronapplog:rw  
    networks:  
      - fastdev  
  
  fakelog:  
    build:  
      context: fakelog/  
    volumes:  
      - cronlog:/app/cronapplog:rw  
      - filebeat:/usr/share/filebeat/data:rw  
    networks:  
      - fastdev  
  
volumes:    
  cronlog:   
  filebeat:  
    
networks:  
  fastdev:  
    driver: bridge  

gethpeers Dockerfile Fixed

  
FROM debian:stretch-slim  
RUN apt-get -y update && apt-get install -y cron curl jq nano && \  
    rm -r /var/lib/apt/lists/*  
ADD . /app  
ADD crontab /var/spool/cron/crontabs/root  
RUN chmod 0600 /var/spool/cron/crontabs/root  
RUN chmod +x /app/run-cronjob.sh  
RUN chmod +x /app/start.sh  
CMD cron -f  

gethpeers crontab Fixed

  
* * * * * /app/run-cronjob.sh /app/start.sh > /proc/1/fd/1 2>/proc/1/fd/2  
* * * * * echo hello > /proc/1/fd/1 2>/proc/1/fd/2  

gethpeers run-cronjob Fixed

  
#!/bin/bash  
  
if [ -z "$1" ] ; then  
  echo "need name of cron job as first argument" > /proc/1/fd/1 2>/proc/1/fd/2  
  exit 1  
fi  
   
if [ ! -x "$1" ] ; then  
  echo "cron job file $1 not executable, exiting" > /proc/1/fd/1 2>/proc/1/fd/2  
  exit 1  
fi  
   
if "$1"  
then  
  echo "cron job $1 Run!" > /proc/1/fd/1 2>/proc/1/fd/2  
  exit 0  
else  
  echo "cron job $1 failed!" > /proc/1/fd/1 2>/proc/1/fd/2  
  exit 1  
fi  

gethpeers start.sh

  
#!/bin/bash  
  
IP_PORT=xxx.xxx.xxx.xxx:8545  
ETH_METHOD=admin_peers  
PEERS=$(curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"'$ETH_METHOD'","params":[],"id":1}' $IP_PORT |  jq '.result[].network + {"project":"cronapp"}')  
  
printf "\n===== Now Geth Peers =====\n"  
printf "Peers: %s\n" $PEERS  
echo $PEERS >> /app/cronapplog/gethpeers.log  

fakelog Dockerfile

  
FROM docker.elastic.co/beats/filebeat:6.5.4  
COPY filebeat.yml /usr/share/filebeat/filebeat.yml  
USER root  
RUN chown root:filebeat /usr/share/filebeat/filebeat.yml  
USER filebeat  

fakelog filebeat.yml

  
filebeat.prospectors:  
  
- type: log  
  paths:  
    - /app/cronapplog/gethpeers.log  
  exclude_files: ['.gz$']  
  fields:  
    srcname: "geth"  
    srctype: "cron"  
    filebeatserverip: "xxx.xxx.xxx.xxx"  
  fields_under_root: true  
  symlinks: true  
  
output.logstash:  
  hosts: ["logstash:5044"]