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"])