webcron-s

webcron-s ~
Back File: webcron-s.py Modified: 56963729 seconds ago.
# Torrlient Website cron and scheduling
from datetime import datetime
from calendar import timegm
from re import search
from sys import argv
from os import popen
from os import system
from time import sleep

jobs = [
        {
            "start": "php loop.php",
            "track": "loop.php",	
            "await": {
                "script": "self",
                "max_time": "1m",
            }
        }
]

########################################################

def epoch():
    return timegm(datetime(1971, 1, 1, 0, 0, 0).timetuple())

def writelog(append, enabled):
    if enabled:
        open("webcron.log", "a").write(append)

def running_task(task, find):
    r = popen(f'ps ax | grep {task}').read().split('\n') 

    for i in range(len(r)):
        if search(find, r[i]):
            re = r[i].split(' ')
            l = 0:
            while re[l] == "":
                l = l + 1    
            return int(re[l])

    return False


def runned(start):
    return epoch() - start

def kill(pid, term):
    system(f'kill {pid}')
    print(f"Process: {pid} Was killed for reaching over limit: {term}\n")

def terminate(term, time, pid):
    if search("d", term):
        s = int(term.replace("d", ""))
        if time / 60 / 60 / 24 > s:
            kill(pid, term)
    elif search("h", term):
        s = int(term.replace("h", ""))
        if time / 60 / 60 > s:
            kill(pid, term)
    elif search("m", term):
        s = int(term.replace("m", ""))
        if time / 60 > s:
            kill(pid. term)
    else:
        if term < time:
            kill(pid, term)

def clear_task(l, item):
    new = []

    for i in range(len(l)):
        if item != l[i]["idx"]:
            new.append(l[i])

    return new

cli = argv
running = []
cronepoch = epoch()
enable_logging = False

if "-l" in cli:
    enable_logging = True

if "-s" in cli:
    print('')

if "-r" in cli:
    for i in range(len(jobs)):

        system(f'{jobs[i]["start"]} > /dev/null 2>&1 &')

        running.append({
            "idx": i,
            "pid": running_task(jobs[i]["track"], jobs[i]["start"]),
            "time": epoch()
        })

        current_task_pid = running_task(jobs[i]["track"], jobs[i]["start"])

        if jobs[i]["await"]["script"] == "self":
            if(running_task(jobs[i]["track"], jobs[i]["start"])):

                writelog(
                    f'Task Started: {i}\tPID: {current_task_pid}\n',
                    enable_logging
                )

            while running_task(jobs[i]["track"], jobs[i]["start"]):

                writelog(
                    f'Awaiting Task: {i}\tTime: {runned(running[i]["time"])}\n',
                    enable_logging
                )

                terminate(
                        jobs[i]["await"]["max_time"],
                        runned(running[i]["time"]),
                        running[i]["pid"]
                )

                sleep(1)
    


        for l in range(len(running)):
            if running_task(jobs[running[l]["idx"]]["track"], jobs[running[l]["idx"]]["start"]):
                print('')
            else:
                running = clear_task(running, running[l]["idx"])


print("End\n")
print(len(running), running)
exit()
while len(running) > 0:
    for l in range(len(running)):
        if running_task(jobs[running[l]["idx"]]["track"], jobs[running[l]["idx"]]["start"]):
            print('')
        else:
            running = clear_task(running, running[l]["idx"])