方法1

  • 尝试几次通过网上的touch方法都不行
  • 最后得到解决思路:既然mv uwsgi.log文件后,uwsgi还是会自动找到mv后的文件继续写入,那么我就索性不再mv,直接cp,把log文件cp出来,再把原log文件的内容清空,这样曲线救国,想想其实比网上的那种方法要简单的多
  • 最后通过sh脚本+crontab定时任务,每天让其00:00自动cp然后清空即可达到log文件每日备份的效果
  • 脚本
    53419-qw5m2ih7hl9.png
  • 定时任务
    06108-ajphj785rl5.png

方法2

  • python脚本实现
from apscheduler.schedulers.background import BackgroundScheduler  # 子进程调度器
from apscheduler.executors.pool import ThreadPoolExecutor  # 执行器
import os, time, shutil

base_path = '/home/uwsgi/log/web'

executor = ThreadPoolExecutor()
scheduler = BackgroundScheduler(executors={'default': executor})


def main():
    '''
    对uWSGI的系统级别的日志输出进行转移
    :return:
    '''
    today = time.strftime("%Y-%m-%d", time.localtime())

    # 得到原目标文件路径
    base_file = os.path.join(base_path, 'uwsgi.log')

    # 得到cp后的文件路径
    new_file = os.path.join(base_path, 'uwsgi.log_{}'.format(today))

    # cp 操作
    shutil.copyfile(base_file, new_file)

    # 清空源文件的内容
    os.system('cat /dev/null > {}'.format(base_file))


if __name__ == '__main__':
    # 每天凌晨执行一下任务
    scheduler.add_job(main, 'cron', hour='0')
    scheduler.start()
    while True:
        time.sleep(60 * 60 * 24)
Last modification:April 26th, 2020 at 11:09 am
安安,亲觉得有用, 请随意打赏嗷