From b6610a75bad49763f5226556becdf2894860784b Mon Sep 17 00:00:00 2001 From: kev Date: Fri, 22 May 2020 14:17:38 +0800 Subject: [PATCH] update ndscheduler --- ndscheduler/Dockerfile | 7 ++----- ndscheduler/README.md | 9 +++++++++ ndscheduler/data/jobs/__init__.py | 0 ndscheduler/data/jobs/shell_job.py | 30 ++++++++++++++++++++++++++++++ ndscheduler/data/settings.py | 18 ++++++++++++++++++ ndscheduler/docker-compose.yml | 3 +++ 6 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 ndscheduler/data/jobs/__init__.py create mode 100644 ndscheduler/data/jobs/shell_job.py create mode 100644 ndscheduler/data/settings.py diff --git a/ndscheduler/Dockerfile b/ndscheduler/Dockerfile index e23c9d7..8271c30 100644 --- a/ndscheduler/Dockerfile +++ b/ndscheduler/Dockerfile @@ -6,15 +6,12 @@ FROM python:2-alpine MAINTAINER EasyPi Software Foundation RUN set -xe \ - && apk add --no-cache sqlite \ - && pip install ndscheduler requests \ - && rm -f /usr/local/lib/python2.7/site-packages/simple_scheduler/jobs/apns_job.py* + && apk add --no-cache bash sqlite \ + && pip install ndscheduler requests WORKDIR /opt/ndscheduler VOLUME /opt/ndscheduler EXPOSE 8888 -ENV NDSCHEDULER_SETTINGS_MODULE=simple_scheduler.settings - CMD ["python", "-c", "from ndscheduler.server.server import SchedulerServer; SchedulerServer.run()"] diff --git a/ndscheduler/README.md b/ndscheduler/README.md index 75e0ab5..1c5ac7e 100644 --- a/ndscheduler/README.md +++ b/ndscheduler/README.md @@ -4,4 +4,13 @@ ndscheduler [ndscheduler][1] is a flexible python library for building your own cron-like system, with REST APIs and a Web UI. +```bash +$ mkdir -p data/jobs +$ touch data/jobs/__init__.py +$ wget -P data https://github.com/Nextdoor/ndscheduler/raw/v0.3.0/simple_scheduler/settings.py +$ wget -P data/jobs https://github.com/Nextdoor/ndscheduler/raw/v0.3.0/simple_scheduler/jobs/shell_job.py +$ docker-compose up -d +$ curl http://127.0.0.1:8888 +``` + [1]: https://github.com/Nextdoor/ndscheduler diff --git a/ndscheduler/data/jobs/__init__.py b/ndscheduler/data/jobs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ndscheduler/data/jobs/shell_job.py b/ndscheduler/data/jobs/shell_job.py new file mode 100644 index 0000000..68f0c85 --- /dev/null +++ b/ndscheduler/data/jobs/shell_job.py @@ -0,0 +1,30 @@ +"""A job to run executable programs.""" + +from subprocess import call + +from ndscheduler import job + + +class ShellJob(job.JobBase): + + @classmethod + def meta_info(cls): + return { + 'job_class_string': '%s.%s' % (cls.__module__, cls.__name__), + 'notes': ('This will run an executable program. You can specify as many ' + 'arguments as you want. This job will pass these arguments to the ' + 'program in order.'), + 'arguments': [ + {'type': 'string', 'description': 'Executable path'} + ], + 'example_arguments': '["/usr/local/my_program", "--file", "/tmp/abc", "--mode", "safe"]' + } + + def run(self, *args, **kwargs): + return {'returncode': call(args)} + + +if __name__ == "__main__": + # You can easily test this job here + job = ShellJob.create_test_instance() + job.run('ls', '-l') diff --git a/ndscheduler/data/settings.py b/ndscheduler/data/settings.py new file mode 100644 index 0000000..4895da9 --- /dev/null +++ b/ndscheduler/data/settings.py @@ -0,0 +1,18 @@ +"""Settings to override default settings.""" + +import logging + +# +# Override settings +# +DEBUG = True + +HTTP_PORT = 8888 +HTTP_ADDRESS = '0.0.0.0' + +# +# Set logging level +# +logging.getLogger().setLevel(logging.DEBUG) + +JOB_CLASS_PACKAGES = ['jobs'] diff --git a/ndscheduler/docker-compose.yml b/ndscheduler/docker-compose.yml index 18053c2..8b111ae 100644 --- a/ndscheduler/docker-compose.yml +++ b/ndscheduler/docker-compose.yml @@ -6,4 +6,7 @@ services: - "8888:8888" volumes: - ./data:/opt/ndscheduler + environment: + - PYTHONPATH=/opt/ndscheduler + - NDSCHEDULER_SETTINGS_MODULE=settings restart: unless-stopped