diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..fc130b7836b036c0e929b9d61095d4a35b1b40cc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+__pycache__
+config.ini
diff --git a/worker.py b/worker.py
index d89e6f4ee0ca6ff183c8ef03a1c841eddff1517d..f050877aa775437478cf25d87c4ef9fc679a38b1 100755
--- a/worker.py
+++ b/worker.py
@@ -1,6 +1,50 @@
 #!/usr/bin/env python3
-import config
 import requests
+import time
+import threading
+import sched
+import random
+import traceback
+import configparser
 
-if __name__ == '__main__':
-	print('foo')
+config = configparser.ConfigParser()
+config.read('config.ini')
+
+scheduler = sched.scheduler()
+def run_scheduler():
+	time.sleep(1) # weird things on startup
+	while True:
+		scheduler.run()
+		time.sleep(10)
+
+def sched_func(delay, priority=0, firstdelay=None, args=[], kargs={}):
+	print(delay)
+	if firstdelay == None:
+		firstdelay = random.randint(1, 10)
+	def wrapper(func):
+		def sched_wrapper():
+			try:
+				func(*args, **kargs)
+			except Exception:
+				traceback.print_exc()
+			scheduler.enter(delay, priority, sched_wrapper)
+		scheduler.enter(firstdelay, priority, sched_wrapper)
+		return func
+	return wrapper
+
+threading.Thread(target=run_scheduler, daemon=True).start()
+
+@sched_func(5)
+def ping_website():
+	r = requests.post(config['API']['BASE']+'/jobs/api/ping', params={'apikey': config['API']['KEY'], 'host':config['MAIN']['HOST']})
+	if not r.status_code == 200:
+		print("Error sending ping: ",r)
+
+@sched_func(10)
+def get_jobs():
+	r = requests.post(config['API']['BASE']+'/jobs/api/schedule', json={'apikey': config['API']['KEY'], 'host':config['MAIN']['HOST'], 'jobtypes': 'thumbnail'})
+	print(r.text)
+
+
+while True:
+	time.sleep(10)