01.介绍
在linux系统中,想执行脚本(包括shell、python)时,在没有使用到crontab定时任务的情况下,可以写一个Python自身的定时触发器。
通过获取当前时间与目标触发时间的时间差,之后判定时间差是否为0(即是目标触发时间),倘若是0,则执行一次任务;之后通过while判定,倘若为True则执行任务,达到每晚执行的疗效。
假如结合at任务linux 定时任务 秒,在linux系统后台执行,这么疗效更佳。在文章最后附一下主要步骤。
02.python2代码
#!/usr/bin/python
#-*-coding:utf-8-*-
importtime
fromdatetimeimportdatetime,timedelta
defdoFirst():
curTime=datetime.now()#读取当前系统时间
desTime=curTime.replace(hour=12,minute=0,second=0,microsecond=0)#设置想要触发的目标时间,此处设置为12:00:00
delta=desTime-curTime#时间差
skipSeconds=int(delta.total_seconds())#把时间差转换成以秒为单位的时间`
ifskipSeconds==0:
returnTrue
else:
ifskipSeconds<0:
skipSeconds+=24*60*60#设置触发周期linux 关机命令,此处设置为1天
print"还有%d秒触发"%skipSeconds
returnFalse
whileTrue:
ifdoFirst():
#99加法表Python代码
foriinrange(1,10):
forjinrange(1,i+1):
print'{}x{}={}t'.format(i,j,i*j),
print''
time.sleep(23*59*60)#触发周期为1天,当还剩1分钟时,开始倒计时
time.sleep(1)
03.Python3代码
#!/usr/bin/python3
importtime
fromdatetimeimportdatetime,timedelta
defdofirst():
now_time=datetime.now()#如今时间
des_time=now_time.replace(hour=7,minute=7,second=7,microsecond=0)#定时执行时间,这儿设置为07:07:07
delta_time=des_time-now_time#时间差
skip_seconds=int(delta_time.total_seconds())#时间差转换成1秒为单位
ifskip_seconds==0:
returnTrue
else:
ifskip_seconds<0:
skip_seconds+=24*60*60#设置触发周期,此处设置为1天
print("还有%d秒触发"%skip_seconds)
returnFalse
whileTrue:
ifdofirst():
#9x9加法口诀
foriinrange(1,10):
forjinrange(1,i+1):
print('{}x{}={}t'.format(i,j,i*j),end='')
print()
time.sleep(23*59*60)#触发周期设置为1天,在还有1分钟,开始倒计时
time.sleep(1)
04.一次性执行任务at使用
at的简单使用
$at15:07--在哪一个时间执行
warning:commandswillbeexecutedusing/bin/sh
at>/home/mai/test.sh
at>---按CTRL+D保存并退出
job6atWedApr315:07:002019
$atq--查看执行任务
6WedApr315:07:002019amai
$at-c6|tail-2--查看执行具体任务
/home/mai/test.sh
$atrm6--删掉任务
$ps-ef|greptest.sh--查看是否还存在linux内核,假如脚本上面还有循环定时linux 定时任务 秒,这么进程还是存在的,这么就要killpid
事例:
$at4:00tomorrow--在今天4点执行
at>/home/mai/.bk_data.sh
at>