74 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import subprocess
 | 
						|
import time
 | 
						|
import os
 | 
						|
import datetime
 | 
						|
import traceback
 | 
						|
import io
 | 
						|
import pprint
 | 
						|
 | 
						|
def f1():
 | 
						|
    LOG_SIZE = 10 * 1024 * 1024
 | 
						|
    busybox_path = '%s/tmp/busybox' % os.environ['HOME']
 | 
						|
    log_path = '%s/p1/p1/log-f4.txt' % os.environ['HOME']
 | 
						|
    os.makedirs(os.path.dirname(log_path), exist_ok=True)
 | 
						|
 | 
						|
    def trim_log():
 | 
						|
        if not os.path.exists(log_path):
 | 
						|
            return
 | 
						|
 | 
						|
        log_size = 0
 | 
						|
 | 
						|
        try:
 | 
						|
            log_stats = os.stat(log_path)
 | 
						|
            log_size = log_stats.st_size
 | 
						|
        except:
 | 
						|
            return
 | 
						|
 | 
						|
        if log_size > LOG_SIZE:
 | 
						|
            try:
 | 
						|
                log_path2 = os.path.splitext(log_path)
 | 
						|
                os.rename(
 | 
						|
                    log_path,
 | 
						|
                    '%s-backup%s' % (
 | 
						|
                        log_path2[0],
 | 
						|
                        log_path2[1],
 | 
						|
                    ),
 | 
						|
                )
 | 
						|
            except:
 | 
						|
                return
 | 
						|
 | 
						|
    def log(data=None):
 | 
						|
        with io.open(log_path, 'a') as f:
 | 
						|
            f.write(
 | 
						|
                '%s\n%s\n%s\n' % (
 | 
						|
                    datetime.datetime.now().isoformat(),
 | 
						|
                    pprint.pformat(data),
 | 
						|
                    traceback.format_exc(),
 | 
						|
                )
 | 
						|
            )
 | 
						|
 | 
						|
        trim_log()
 | 
						|
 | 
						|
    while True:
 | 
						|
        try:
 | 
						|
            t1 = subprocess.check_output(
 | 
						|
                [busybox_path, 'ps', '-e', 'cpu']
 | 
						|
            ).decode('utf-8')
 | 
						|
            t2 = t1.splitlines()
 | 
						|
            if len(t2) > 20:
 | 
						|
                log(
 | 
						|
                    dict(t2=t2)
 | 
						|
                )
 | 
						|
                print('\n', end='')
 | 
						|
 | 
						|
            print('\r%s %d' % (
 | 
						|
                datetime.datetime.now().isoformat(),
 | 
						|
                len(t2),
 | 
						|
            ), end='')
 | 
						|
        except:
 | 
						|
            log()
 | 
						|
        time.sleep(10)
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    f1()
 |