本文主要介绍在linux环境下,定时循环执行python脚本的两种方法。
方法一: nohup
vim time.py
1 import time 2 while(True): 3 #time.sleep(1) 4 with open('time.log', 'a+') as logfile: 5 logfile.write('Hello, World!\n') 6 time.sleep(1) 7 #break
在终端运行如下命令
nohup python time.py &
功能:实现了每秒将 "Hello, World!" 字符串,写入当前目录下的 time.log 文件中。
原理:利用 python 的无限循环 while(True) ,并使用 time.sleep() 方法设置相应的秒数时停,最后通过 nohup 和 & 命令将脚本挂在后台不挂断的运行。
nohup command &:在后台运行 command,原程序的标准输出和错误重定向到当前目录下的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
查看:通过 tail -f time.log 在当前终端追踪显示 time.log 文件,可用 Ctrl+c 中断显示。
中断:通过 jobs 命令查看当前后台中运行的任务,再使用 fg %n 将第n项挂到前台,最后用 Ctrl+c 中断任务。
或者通过 ps aux | grep python 命令查看 python 进程,找到挂起的脚本的 PID ,再使用 kill -9 PID 中断挂起的脚本。
拓展:nohup和&后台运行,进程查看及终止、Linux的nohup命令的用法
方法二: cron
vim time.py
1 with open('/home/titanxp/test/time.log', 'a+') as logfile: 2 logfile.write('Hello, World!\n')
在终端中使用 crontab -e 命令建立如下任务
*/1 * * * * /usr/bin/python /home/titanxp/test/time.py
功能:实现了每分钟将 "Hello, World!" 字符串,写入指定目录下的 time.log 文件中。
原理:通过 crontab -e 命令建立周期性任务。要注意的是,脚本中和脚本路径需要写全路径。
crontab 格式:minute hour day-of-month month-of-year day-of-week commands
查看:通过 tail -f /var/log/cron.log 命令查看 cron 日志,可看到任务是否在执行。
中断:通过 crontab -e 打开进行任务编辑,只需删除或注释(#)定时任务即可中断。
拓展:crontab命令、Linux定时执行脚本
总结
方法一运用 Python 的 time 库实现简单的定时循环执行脚本,可适用变量需累加的情况。
方法二结合 cron 命令可实现复杂的定时循环循环执行脚本。
上述表述可能不到位,欢迎交流讨论。