Linux下使用Python实现定时push到github

来源:互联网 发布:淘宝被发现虚假交易 编辑:程序博客网 时间:2024/06/10 14:20

Linux下使用Python实现定时push到github

把大象装进冰箱总共分两步:

  • 1、写一个python脚本,使它能够执行git push
  • 2、定时运行上面的python脚本


1、写一个python脚本,使它能够执行git push

首先来看看python如何执行命令,以git status为例

cmd.py

#!/usr/bin/env pythonimport subprocesssubprocess.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.pubssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSUGPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XAt3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/EnmZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbxNrRFi9wrf+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 pythonimport subprocessimport datetimesubprocess.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 datetimedef 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小白一枚,有错误的地方还请您帮忙纠正,谢谢~
就这样,拜拜~~

这里写图片描述