mirror of
				https://github.com/willfarrell/docker-crontab.git
				synced 2025-10-31 05:37:28 +01:00 
			
		
		
		
	chore: merge from private git repo.
This commit is contained in:
		
							
								
								
									
										51
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							| @@ -13,37 +13,32 @@ jobs: | ||||
|   multi: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - | ||||
|         name: Checkout | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
|       - | ||||
|         name: Set up QEMU | ||||
|         uses: docker/setup-qemu-action@v1 | ||||
|       - | ||||
|         name: Set up Docker Buildx | ||||
|  | ||||
|       - name: Set up Docker Buildx | ||||
|         id: buildx | ||||
|         uses: docker/setup-buildx-action@v1 | ||||
|       - | ||||
|         name: Login to DockerHub | ||||
|         uses: docker/login-action@v1 | ||||
|         with: | ||||
|           username: ${{ secrets.DOCKER_USERNAME }} | ||||
|           password: ${{ secrets.DOCKER_PASSWORD }} | ||||
|  | ||||
|       - if: github.ref == 'refs/heads/main' | ||||
|         name: Conditional(Set tag as `latest`) | ||||
|         run: echo "tag=willfarrell/crontab:latest" >> $GITHUB_ENV | ||||
| #      - name: Login to DockerHub | ||||
| #        uses: docker/login-action@v1 | ||||
| #        with: | ||||
| #          username: ${{ secrets.DOCKER_USERNAME }} | ||||
| #          password: ${{ secrets.DOCKER_PASSWORD }} | ||||
|  | ||||
|       - if: startsWith(github.ref, 'refs/tags/') | ||||
|         name: Conditional(Set tag as `{version}`) | ||||
|         run: echo "tag=willfarrell/crontab:${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | ||||
| #      - if: github.ref == 'refs/heads/main' | ||||
| #        name: Conditional(Set tag as `latest`) | ||||
| #        run: echo "tag=willfarrell/crontab:latest" >> $GITHUB_ENV | ||||
|  | ||||
|       - | ||||
|         name: Build and push | ||||
|         uses: docker/build-push-action@v2 | ||||
|         with: | ||||
|           context: . | ||||
|           file: ./Dockerfile | ||||
|           push: true | ||||
|           tags: | | ||||
|             ${{ env.tag }} | ||||
| #      - if: startsWith(github.ref, 'refs/tags/') | ||||
| #        name: Conditional(Set tag as `{version}`) | ||||
| #        run: echo "tag=willfarrell/crontab:${GITHUB_REF#refs/*/}" >> $GITHUB_ENV | ||||
|  | ||||
| #      - name: Build and push | ||||
| #        uses: docker/build-push-action@v2 | ||||
| #        with: | ||||
| #          context: . | ||||
| #          file: ./Dockerfile | ||||
| #          push: true | ||||
| #          tags: | | ||||
| #            ${{ env.tag }} | ||||
|   | ||||
							
								
								
									
										40
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								Dockerfile
									
									
									
									
									
								
							| @@ -1,24 +1,36 @@ | ||||
| FROM alpine:3.16 as rq-build | ||||
| FROM alpine:latest as rq-build | ||||
|  | ||||
| ENV RQ_VERSION=1.0.2 | ||||
| WORKDIR /root/ | ||||
| WORKDIR /usr/bin/rq/ | ||||
|  | ||||
| RUN apk --update add upx \ | ||||
|     && wget https://github.com/dflemstr/rq/releases/download/v${RQ_VERSION}/rq-v${RQ_VERSION}-x86_64-unknown-linux-musl.tar.gz \ | ||||
|     && tar -xvf rq-v1.0.2-x86_64-unknown-linux-musl.tar.gz \ | ||||
|     && upx --brute rq | ||||
| RUN apk update && \ | ||||
|     apk upgrade && \ | ||||
|     apk add --no-cache \ | ||||
|         upx && \ | ||||
|     wget https://github.com/dflemstr/rq/releases/download/v${RQ_VERSION}/rq-v${RQ_VERSION}-x86_64-unknown-linux-musl.tar.gz && \ | ||||
|     tar -xvf rq-v${RQ_VERSION}-x86_64-unknown-linux-musl.tar.gz && \ | ||||
|     upx --brute rq | ||||
|  | ||||
| FROM library/docker:stable | ||||
|  | ||||
| COPY --from=rq-build /root/rq /usr/local/bin | ||||
| FROM docker:latest as release | ||||
|  | ||||
| ENV HOME_DIR=/opt/crontab | ||||
| RUN apk add --no-cache --virtual .run-deps gettext jq bash tini \ | ||||
|     && mkdir -p ${HOME_DIR}/jobs ${HOME_DIR}/projects \ | ||||
|     && adduser -S docker -D | ||||
|  | ||||
| COPY docker-entrypoint / | ||||
| ENTRYPOINT ["/sbin/tini", "--", "/docker-entrypoint"] | ||||
| RUN apk update && \ | ||||
|     apk upgrade && \ | ||||
|     apk add --no-cache \ | ||||
|         bash \ | ||||
|         curl \ | ||||
|         gettext \ | ||||
|         jq \ | ||||
|         tini \ | ||||
|         wget && \ | ||||
|     mkdir -p ${HOME_DIR}/jobs ${HOME_DIR}/projects && \ | ||||
|     adduser -S docker -D | ||||
|  | ||||
| COPY --from=rq-build /usr/bin/rq/rq /usr/local/bin | ||||
| COPY entrypoint.sh / | ||||
|  | ||||
| ENTRYPOINT ["/sbin/tini", "--", "/entrypoint.sh"] | ||||
|  | ||||
| HEALTHCHECK --interval=5s --timeout=3s \ | ||||
|     CMD ps aux | grep '[c]rond' || exit 1 | ||||
|   | ||||
							
								
								
									
										48
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,14 +1,6 @@ | ||||
| # docker-crontab | ||||
|  | ||||
| A simple wrapper over `docker` to all complex cron job to be run in other containers. | ||||
|  | ||||
| ## Supported tags and Dockerfile links | ||||
|  | ||||
| -	[`latest` (*Dockerfile*)](https://github.com/willfarrell/docker-crontab/blob/master/Dockerfile) | ||||
| -	[`1.0.0` (*Dockerfile*)](https://github.com/willfarrell/docker-crontab/blob/1.0.0/Dockerfile) | ||||
| -	[`0.6.0` (*Dockerfile*)](https://github.com/willfarrell/docker-crontab/blob/0.6.0/Dockerfile) | ||||
|  | ||||
|  [](http://microbadger.com/images/willfarrell/crontab "Get your own image badge on microbadger.com") | ||||
| A simple wrapper over `docker` to all complex cron job to be run in other containers. Note, this is a maintained fork of [willfarrell/docker-crontab](https://github.com/willfarrell/docker-crontab). | ||||
|  | ||||
| ## Why? | ||||
| Yes, I'm aware of [mcuadros/ofelia](https://github.com/mcuadros/ofelia) (>250MB when this was created), it was the main inspiration for this project.  | ||||
| @@ -23,7 +15,6 @@ A great project, don't get me wrong. It was just missing certain key enterprise | ||||
| - Ability to trigger scripts in other containers on completion cron job using `trigger`. | ||||
|  | ||||
| ## Config file | ||||
|  | ||||
| The config file can be specifed in any of `json`, `toml`, or `yaml`, and can be defined as either an array or mapping (top-level keys will be ignored; can be useful for organizing commands) | ||||
|  | ||||
| - `name`: Human readable name that will be used as the job filename. Will be converted into a slug. Optional. | ||||
| @@ -61,7 +52,6 @@ See [`config-samples`](config-samples) for examples. | ||||
| ## How to use | ||||
|  | ||||
| ### Command Line | ||||
|  | ||||
| ```bash | ||||
| docker build -t crontab . | ||||
| docker run -d \ | ||||
| @@ -73,7 +63,6 @@ docker run -d \ | ||||
| ``` | ||||
|  | ||||
| ### Use with docker-compose | ||||
|  | ||||
| 1. Figure out which network name used for your docker-compose containers | ||||
| 	* use `docker network ls` to see existing networks | ||||
| 	* if your `docker-compose.yml` is in `my_dir` directory, you probably has network `my_dir_default` | ||||
| @@ -82,38 +71,3 @@ docker run -d \ | ||||
| 	* use `--network NETWORK_NAME` to connect new container into docker-compose network | ||||
| 	* use `--rm --name NAME` to use named container | ||||
| 	* e.g. `"dockerargs": "--network my_dir_default --rm --name my-best-cron-job"` | ||||
|  | ||||
| ### Dockerfile | ||||
|  | ||||
| ```Dockerfile | ||||
| FROM willfarrell/crontab | ||||
|  | ||||
| COPY config.json ${HOME_DIR}/ | ||||
|  | ||||
| ``` | ||||
|  | ||||
| ### Logrotate Dockerfile | ||||
|  | ||||
| ```Dockerfile | ||||
| FROM willfarrell/crontab | ||||
|  | ||||
| RUN apk add --no-cache logrotate | ||||
| RUN echo "*/5 *	* * *  /usr/sbin/logrotate /etc/logrotate.conf" >> /etc/crontabs/logrotate | ||||
| COPY logrotate.conf /etc/logrotate.conf | ||||
|  | ||||
| CMD ["crond", "-f"] | ||||
| ``` | ||||
|  | ||||
| ### Logging - In Dev | ||||
|  | ||||
| All `stdout` is captured, formatted, and saved to `/var/log/crontab/jobs.log`. Set `LOG_FILE` to `/dev/null` to disable logging. | ||||
|  | ||||
| example: `e6ced859-1563-493b-b1b1-5a190b29e938 2017-06-18T01:27:10+0000 [info] Start Cronjob **map-a-vol** map a volume` | ||||
|  | ||||
| grok: `CRONTABLOG %{DATA:request_id} %{TIMESTAMP_ISO8601:timestamp} \[%{LOGLEVEL:severity}\] %{GREEDYDATA:message}` | ||||
|  | ||||
| ## TODO | ||||
| - [ ] Have ability to auto regenerate crontab on file change (signal HUP?) | ||||
| - [ ] Run commands on host machine (w/ --privileged?) | ||||
| - [ ] Write tests | ||||
| - [ ] Setup TravisCI | ||||
|   | ||||
| @@ -1,12 +1,10 @@ | ||||
| #!/usr/bin/env bash | ||||
| #!/bin/bash | ||||
| 
 | ||||
| set -e | ||||
| 
 | ||||
| DOCKER_SOCK=/var/run/docker.sock | ||||
| CRONTAB_FILE=/etc/crontabs/docker | ||||
| 
 | ||||
| # For local testing only. | ||||
| #HOME_DIR=. | ||||
| 
 | ||||
| if [ -z "${HOME_DIR}" ]; then | ||||
|     echo "HOME_DIR not set." | ||||
|     exit 1 | ||||
| @@ -114,19 +112,11 @@ EOF | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| #make_host_cmd() { | ||||
| #   HOST_BINARY=$(echo ${1} | jq -r .host) | ||||
| #   TMP_COMMAND=$(echo ${1} | jq -r .command) | ||||
| #   echo "${HOST_BINARY} ${TMP_COMMAND}" | ||||
| #} | ||||
| 
 | ||||
| make_cmd() { | ||||
|     if [ "$(echo "${1}" | jq -r .image)" != "null" ]; then | ||||
|         make_image_cmd "${1}" | ||||
|     elif [ "$(echo "${1}" | jq -r .container)" != "null" ]; then | ||||
|         make_container_cmd "${1}" | ||||
|     #elif [ "$(echo ${1} | jq -r .host)" != "null" ]; then | ||||
|     #   make_host_cmd "${1}" | ||||
|     else | ||||
|         echo "${1}" | jq -r .command | ||||
|     fi | ||||
| @@ -257,7 +247,7 @@ start_app() { | ||||
|     normalize_config | ||||
|     export CONFIG=${HOME_DIR}/config.working.json | ||||
|     if [ ! -f "${CONFIG}" ]; then | ||||
|         echo "generated ${CONFIG} missing." | ||||
|         echo "generated ${CONFIG} missing. exiting." | ||||
|         exit 1 | ||||
|     fi | ||||
|     if [ "${1}" == "crond" ]; then | ||||
| @@ -268,4 +258,5 @@ start_app() { | ||||
| } | ||||
| 
 | ||||
| ensure_docker_socket_accessible | ||||
| printf "✨ starting crontab container ✨\n" | ||||
| start_app "${@}" | ||||
							
								
								
									
										20
									
								
								test_logging
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								test_logging
									
									
									
									
									
								
							| @@ -1,20 +0,0 @@ | ||||
| #!/usr/bin/env bash | ||||
| set -e | ||||
|  | ||||
| # This file is for testing the logging of docker output #8 | ||||
|  | ||||
| LOG_FILE=./jobs.log | ||||
| touch ${LOG_FILE} | ||||
| UUID="xxxxxxxxxxxxxxxxx" | ||||
|  | ||||
| exec > >(read message; echo "${UUID} $(date) [info] $message" | tee -a ${LOG_FILE} ) | ||||
| exec 2> >(read message; echo "${UUID} $(date) [error] $message" | tee -a ${LOG_FILE} >&2) | ||||
|  | ||||
| echo "Start" | ||||
|  | ||||
| docker run alpine sh -c 'while :; do echo "ping"; sleep 1; done' | ||||
| # [error] write /dev/stdout: broken pipe | ||||
| # --log-driver syslog <- errors | ||||
| # --log-driver none <- errors | ||||
|  | ||||
| echo "End" | ||||
		Reference in New Issue
	
	Block a user