考虑此方法:
import croniter
import datetime
import re
import sys
import time
from sys import argv
now=datetime.datetime.now()
def main():
f = sys.stdin
f1 = f.readlines() #f.readlines()
for x in f1:
if not re.match('^[0-9*]', x):
continue
a = re.split(r'\s+', x)
cron = croniter.croniter(' '.join(a[:5]), now)
print("%s %s" % (cron.get_next(datetime.datetime), ' '.join(a[5:])))
if __name__ == "__main__":
main()
它将检查crontab配置文件stdin
上给定的文件,其运行方式如下:python myfile.py < /etc/crontab
或文件所在的位置。
它检查crontab上的任务,并在下次在系统中运行每个任务时打印。
输出是这样的:
2018-12-03 17:17:00 root cd / && run-parts --report /etc/cron.hourly
2018-12-04 06:25:00 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
2018-12-09 06:47:00 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
2019-01-01 06:52:00 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
现在,参考日期是now
,并且在脚本上指定了日期,我需要在cli上实际指定该日期,它应该像这样运行:python myfile.py 11:12 < /path/to/crontab
我尝试将now
更改为此:
now=time.strptime("%H:%M", argv[0]);
但是它把我扔了
Traceback (most recent call last):
File "cron.py", line 9, in <module>
now=time.strptime("%H:%M", argv[0]); #datetime.datetime.now()
File "/usr/lib/python3.6/_strptime.py", line 559, in _strptime_time
tt = _strptime(data_string, format)[0]
File "/usr/lib/python3.6/_strptime.py", line 362, in _strptime
(data_string, format))
ValueError: time data '%H:%M' does not match format 'cron.py'
有什么想法吗?