kopia lustrzana https://github.com/piku/piku
				
				
				
			Preliminary cron support
							rodzic
							
								
									3ced29b193
								
							
						
					
					
						commit
						b709c54e91
					
				
							
								
								
									
										21
									
								
								piku.py
								
								
								
								
							
							
						
						
									
										21
									
								
								piku.py
								
								
								
								
							| 
						 | 
				
			
			@ -17,7 +17,7 @@ from os import chmod, getgid, getuid, symlink, unlink, remove, stat, listdir, en
 | 
			
		|||
from os.path import abspath, basename, dirname, exists, getmtime, join, realpath, splitext
 | 
			
		||||
from pwd import getpwuid
 | 
			
		||||
from grp import getgrgid
 | 
			
		||||
from re import sub
 | 
			
		||||
from re import sub, match
 | 
			
		||||
from shutil import copyfile, rmtree, which
 | 
			
		||||
from socket import socket, AF_INET, SOCK_STREAM
 | 
			
		||||
from stat import S_IRUSR, S_IWUSR, S_IXUSR
 | 
			
		||||
| 
						 | 
				
			
			@ -190,6 +190,8 @@ INTERNAL_NGINX_UWSGI_SETTINGS = """
 | 
			
		|||
    uwsgi_param SERVER_NAME $server_name;
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
CRON_REGEXP = "^((?:(?:\*\/)?\d+)|\*) ((?:(?:\*\/)?\d+)|\*) ((?:(?:\*\/)?\d+)|\*) ((?:(?:\*\/)?\d+)|\*) ((?:(?:\*\/)?\d+)|\*) (.*)$"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# === Utility functions ===
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -256,9 +258,17 @@ def parse_procfile(filename):
 | 
			
		|||
                continue
 | 
			
		||||
            try:
 | 
			
		||||
                kind, command = map(lambda x: x.strip(), line.split(":", 1))
 | 
			
		||||
                # Check for cron patterns
 | 
			
		||||
                if kind == "cron":
 | 
			
		||||
                    limits = [59, 24, 31, 12, 7]
 | 
			
		||||
                    matches = match(CRON_REGEXP, command)
 | 
			
		||||
                    if matches:
 | 
			
		||||
                        for i in range(len(limits)):
 | 
			
		||||
                            if int(matches[i+1].replace("*/","").replace("*","1")) > limits[i]:
 | 
			
		||||
                                raise ValueError
 | 
			
		||||
                workers[kind] = command
 | 
			
		||||
            except Exception:
 | 
			
		||||
                echo("Warning: unrecognized Procfile entry '{}' at line {}".format(line, line_number), fg='yellow')
 | 
			
		||||
                echo("Warning: misformatted Procfile entry '{}' at line {}".format(line, line_number), fg='yellow')
 | 
			
		||||
    if len(workers) == 0:
 | 
			
		||||
        return {}
 | 
			
		||||
    # WSGI trumps regular web workers
 | 
			
		||||
| 
						 | 
				
			
			@ -871,6 +881,11 @@ def spawn_worker(app, kind, command, env, ordinal=1):
 | 
			
		|||
            echo("Error: malformed setting 'UWSGI_IDLE', ignoring it.".format(), fg='red')
 | 
			
		||||
            pass
 | 
			
		||||
 | 
			
		||||
    if kind == 'cron':
 | 
			
		||||
        settings.extend([
 | 
			
		||||
            ['cron', command.replace("*/", "-").replace("*","-1")],
 | 
			
		||||
        ])
 | 
			
		||||
 | 
			
		||||
    if kind == 'jwsgi':
 | 
			
		||||
        settings.extend([
 | 
			
		||||
            ('module', command),
 | 
			
		||||
| 
						 | 
				
			
			@ -941,6 +956,8 @@ def spawn_worker(app, kind, command, env, ordinal=1):
 | 
			
		|||
        settings.append(('attach-daemon', command))
 | 
			
		||||
    elif kind == 'static':
 | 
			
		||||
        echo("-----> nginx serving static files only".format(**env), fg='yellow')
 | 
			
		||||
    elif kind == 'cron':
 | 
			
		||||
        echo("-----> uwsgi scheduled cron for {command}".format(**locals()), fg='yellow')
 | 
			
		||||
    else:
 | 
			
		||||
        settings.append(('attach-daemon', command))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue