Linux下使用Python实现定时push到github
把大象装进冰箱总共分两步:
- 1、写一个python脚本,使它能够执行git push
- 2、定时运行上面的python脚本
1、写一个python脚本,使它能够执行git push
首先来看看python如何执行命令,以git status为例
cmd.py
#!/usr/bin/env python
import subprocess
subprocess.call(["git", "status"])
执行python cmd.py,相当于执行了git status
既然git status能执行,那么git add 和git push等命令应该也能执行。但是在push时,需要输入用户名和密码,所以需要我们设置免用户名密码。
这一步骤可以参考:
https://segmentfault.com/a/1190000008435592
附加:linux设置免用户名和密码使用git push
0、在一切操作之前,我们先把git与远程仓库的连接方式由https改为ssh,参考
https://git-scm.com/book/zh/v1/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E7%94%9F%E6%88%90-SSH-%E5%85%AC%E9%92%A5
使用下面的命令查看公钥
cat ~/.ssh/id_ras.pub
公钥一般张成这个样子:
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== schacon@agadorlaptop.local
然后把公钥公钥部署在github上,在下面这个页面中,添加公钥~
1、在/home/username/ 目录下新建一个文本文件,要用touch命令
touch .git-credentials
2、然后在这个文件中输入以下内容:https:{username}:{password}@github.com
{username}和{password}是用户名和密码,比如我的就是:https:lijialin:123456@github.com
3、修改git配置,执行命令:
git config --global crediential.helper store
这个命令会在.gitconfig文件中添加如下配置:
经过上面的步骤,我们再次push时就不用输入用户名和密码了
设置完git免用户名和密码后,我们修改python代码如下:
cmd.py
#!/usr/bin/env python
import subprocess
import datetime
subprocess.call(["git", "add", "."])
subprocess.call(["git", "commit", "-m", "auto push at " + str(datetime.datetime.now())]) # 加上当前系统的时间
subprocess.call(["git", "push"])
然后执行python cmd.py,发现push被成功的执行了,同时我们也不用输入用户名和密码,在github上也能看到push的时间了,高兴~
2、定时执行上面的代码
现在我们完成了第一步,已经能够使用python执行git push了。接下来,我们要写一个脚本,使之能够定时执行cmd.py。
所谓定时执行,就是周期性地执行,需要用到Linux下的任务调度进程:crond
crond会定期检查是否有要执行的任务,如果有则自动执行该任务。
如果要执行我们的任务,比如数据备份、邮件提醒等,需要使用crontab工具,Linux下默认安装此服务工具。
我们自定义的crontab文件保存在/var/spool/cron/crontabs/目录下。
在该目录下,使用下面的命令新建一个定时任务(选择vim)
crontab -e
定时任务的格式如下:
minute hour day month week command
前几项表示时间,command表示要执行的命令。
比如我们要,每天凌晨2:00:00执行cmd.py,则加入如下代码:
0 2 * * * python /home/lijialin/Desktop/autopush/cmd.py
有关crontab的命令格式,可见
http://blog.csdn.net/chenggong2dm/article/details/12649053
http://www.cnblogs.com/intval/p/5763929.html
为了测试需要,我写了一段python代码,这个代码能够向 test.txt 文件中写入当前的时间,然后设置定时任务,每隔1分钟执行一次
test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
def write_file(file):
with open(file, 'a') as f:
f.write(str(datetime.datetime.now()) + '\n')
f.close()
file = 'test.txt'
write_file(file)
在crontab中添加:
*/1 * * * * cd /home/lijialin/Desktop/autopush;python test.py
接下来去喝杯咖啡,5分钟后回来看看效果~
可能遇到的问题:
由于环境变量的关系,不同的用户、不同的目录都可能导致python运行异常。我们的服务器上往往有多个版本的python,在有的目录下某个版本的python能正常运行,有的目录下则不能,所以在crontab定义周期性任务时,首先通过cd进入相应的目录,然后再执行python脚本~
其他参考:
http://blog.csdn.net/suibianshen2012/article/details/64124191
补充:我按照上面的方法,写了一段python代码,然后部署到阿里云的服务器上,结果证明这种方法是可行的。
注:本文作者是Linux小白一枚,有错误的地方还请您帮忙纠正,谢谢~
就这样,拜拜~~