在做定时任务功能时,因为是轻量级任务,所以我不想利用python-APScheduler实现定时任务,可以用linux crontab守护线程来实现

上代码:注意,linux crontab只能精确到分,并不能说不能精确到秒,默认是00秒所以cron表达式 25 14 18 11 (星期11月18日14时25分00秒)

from crontab import CronTab


def add(host_id, _type, start_time, end_time, project, frequency=None, unit=None, isAll=0, start_case_id=0,
        end_case_id=0):
    """
    添加测试任务到crontab
    :param project:  项目ID
    :param host_id:  测试域名
    :param _type:  执行类型
    :param start_time:  执行时间
    :param end_time:  结束时间
    :param frequency:  时间间隔
    :param unit:  时间单位

    :return:
    """
    start_time = re.split('-|:| ', start_time)
    end_time = re.split('-|:| ', end_time)
    # 创建当前用户的crontab,当然也可以创建其他用户的,但得有足够权限
    my_user_cron = CronTab(user=True)
    my_user_cron.remove_all(comment=project)
    my_user_cron.remove_all(comment=project+"_job")
    my_user_cron.remove_all(comment=project+"_结束")
    # for j in my_user_cron.crons:
    if _type == 'timing':
        _time = '%s %s %s %s *' % (
            # start_time[5],
            start_time[4],
            start_time[3],
            start_time[2],
            start_time[1],
        )
        command = '/usr/local/bin/python3 /home/xu.han/autotestplat/server/api_test/Util/auto_test.py %s %s %s %s %s >> /home/xu.han/autotestplat/server/%s.log' % (
            project, host_id, isAll, start_case_id, end_case_id, project)
        job = my_user_cron.new(command=command)
    job.set_comment(project+"_job")
    # print(_time)
    # 设置任务执行周期
    job.setall(_time)
    # 最后将crontab写入配置文件
    my_user_cron.write()

最后可以在服务器上crontab -l查看定时任务

linux-crontab-l.png

Last modification:November 16th, 2020 at 09:35 am
如果觉得我的文章对你有用,请随意赞赏