缘起
- 在实际应用中,代码仓库要么使用svn、要么使用git。为了开发时可以使用最新代码,经常需要将本地代码与服务器代码保持一致,手动操作固然可行,但可以有更好的选择;
- 可利用定时机制,定时从svn或git服务器更新代码,实际操作中,需要解决两个问题:定时、更新代码。
Windows下的定时问题
利用windows自带“任务计划程序”
- windows管理工具——>任务计划程序——>创建任务进入定时任务
- 创建任务中,常规选项卡中,建议勾选不管用户登陆和不存储密码选项:
- 建立触发器,对应触发方式,可一次,也可每天每周这种:
- 指定具体的操作,如执行某个bat文件:
schtasks
- 计划命令和程序以定期或在特定时间运行,在计划中添加和删除任务,启动和停止按需任务,以及显示和更改计划任务。
- schtasks.exe工具与控制面板中的 “计划任务” 执行相同的操作。 可以将这些工具一起使用,并且可以互换使用。
schtasks /create /tn "test" /tr "\"C:\svn update\code-update.bat"" /sc HOURLY /mo 1
at命令
- 从Win8开始不再支持at命令;
- at仅能执行一次,无法周期执行;
vbs脚本
- 下面是一个简单的例子,每小时执行一次code-update.bat脚本,其他定时情况可参考:
Set ws=wscript.createobject("wscript.shell") dim bat 'svn-update.bat即为更新本地代码的bat脚本,默认与当前脚本存储在同一目录下 bat="cmd.exe /c code-update.bat" do '0表示不显示窗口,1显示,调试用 ws.run bat,0 '每小时执行一次 wscript.sleep 3600000 echo begin next execute loop
python语言
- 可使用Python 实现定时任务,实际有很多种,常见下面几种:
循环 sleep
threading模块中的Timer
使用schedule模块
APScheduler定时框架
Celery分布式系统
- 这里仅提供一个使用schedule的例子:
import datetime import schedule import time def code-update(): #仅举例做定时任务,不做实际的更新动作 print('Begin to update local code') def tasklist(): #创建一个按1小时的间隔执行任务 schedule.every(3600).seconds.do(code-update) #每1分钟检查一次 while True: schedule.run_pending() time.sleep(60) #清空任务 schedule.clear() #开始执行 tasklist()
Linux下的定时问题
- 以crontab为例来说明,每小时执行一次代码更新动作:
*/60 * * * * code-update.sh #每60分钟即每小时执行一次