linux cron实战:定时github

转自个人博客:siukwan的个人博客

最近由于需要使用实验室的一台高性能工作站来跑程序,ssh进行远程登录,但是有时候电脑重启后,ip发生变化,于是在思考用什么办法来存储这台电脑的ip地址。

刚开始的想法是把ip地址直接上传到这个博客,定时更新。后来想想,既然是自己自定义cron任务,能不能上传到github呢?这样就不用浪费博客的流量了,也是进行了下面的实验:

一、编写shell脚本

首先是确定我要如何更新,更新一些什么信息:

最简单的是,需要更新ip和时间,于是我写了个sh脚本,使用date和ifconfig来获取时间和ip信息,最后将两个文件合并,如下:
#use the 'date' command to get the date, and output to the 'tmp1' file 
#使用date命令获取时间,并重点向输出到文件tmp1 
date > tmp1 

#use the 'ifconfig' command to get ip information(just get the ip address include '172',such as 172.168.12.12), and outpt to the 'tmp2' file 
#使用ifconfig获取172字段的信息,因为局域网的字段为172开头,避免泄漏不必要的信息,只grep了这部分,同样重定向输出到tmp2 
ifconfig | grep 172 > tmp2 

#use the 'cat' command to merger 2 files 
#使用cat 命令合并两个文件 
cat tmp1 tmp2 > result 
其中,我们的局域网网段是172开头的,所以直接grep 172。

接着,我尝试在sh脚本里面加上git的操作,整个cron.sh脚本如下:
#!/bin/bash

#open the directory
#打开cron目录
cd ~/cron

#to avoid the new version changed by other users,git pull first
#避免其他用户更新了目录,先进行git pull到endIdx
git pull

#open the directory again
#再次打开目录
cd ~/cron

#use the 'date' command to get the date, and output to the 'tmp1' file
#使用date命令获取时间,并重点向输出到文件tmp1
date > tmp1

#use the 'ifconfig' command to get ip information(just get the ip address include '172',such as 172.168.12.12), and outpt to the 'tmp2' file
#使用ifconfig获取172字段的信息,因为局域网的字段为172开头,避免泄漏不必要的信息,只grep了这部分,同样重定向输出到tmp2
ifconfig | grep 172 > tmp2

#use the 'cat' command to merger 2 files
#使用cat 命令合并两个文件
cat tmp1 tmp2 > result

#add cron.sh and the result file to the git ***
#把cron.sh和result文件添加到git缓冲区
git add cron.sh
git add result

#git commit the change
#提交更改
git commit -m "refresh"

#push to the github
#最后,上传到github
git push

把cron.sh的权限更改为可执行:
chmod +x cron.sh
然后运行:
./cron.sh
发现能够正常工作。

二、添加cron任务

首先我们可以通过
crontab -l

列出当前的crontab文件内容,即看看是否有cron任务。
接着,我们通过:
crontab -e

命令编辑crontab 文件,添加以下内容:
# crontab -l #list the cron jobs
# crontab -e #to edit the cron
# add these text to the crontab,then save and quit
# it will run cron.sh every 15 minutes
# :wq
# it will be better to restart cron service
# ubuntu:  sudo /etc/init.d/cron restart
# centos:  sudo /sbin/service crond restart

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
*/15 *  *  *  *  /bin/bash ~/cron/cron.sh

其中,关键在于最后一行:
*/15 *  *  *  *  /bin/bash ~/cron/cron.sh
意思是每15分钟执行一次~/cron/cron.sh

保存退出后,为了保险起见,最好重启一下cron服务:
# ubuntu:
sudo /etc/init.d/cron restart
# centos:
sudo /sbin/service crond restart

注意ubuntu和centos的命令有些许不同,至此,我们的自动github更新ip程序完成!
通过这个程序,我们还可以定时github其他的信息,既能延长github的最长contributions时间,又可以免费使用github的服务器帮我们存储信息。

在日夜运行的实验室服务器ndcRobot:
https://github.com/ndcRobot/cron
全部评论

相关推荐

原来已经一年了,因为没有加任何实验室没有学长学姐带,再一次偶然的机会下刷到我们学校的牛肉哥,和他聊天之后发现他也没加实验室能进大厂,我就燃起了希望,去年大概 4 月份找好路线 零基础 开始学 5 月背八股和开始刷算法很难受 7-8 月焦虑躯体化害怕找不到实习 9 月找到一家像样的小厂去实习了 4 个月大三上期末考试结束之后 1 月份回来边实习边准备工作压力很大 当时只有字节、百度、商汤的面试,字节三面挂了,百度 oc,商汤 二面挂(差评 无效面试),之后来深圳百度实习之后还是觉得不甘心一直没把算法和八股扔下一直在准备,百度实习的时候 mt 交给我一个特别重要的工作数据库迁移(特别感谢 mt ,这个需求学到了很多东西处理了一堆线上问题),本来看着暑期他们面试都很困难,然后听说百度要涨实习薪资(然而 5 月并没有涨),就想着留在百度吧也懒得面试了,4 月 20 多的时候字节 hr 打电话约面问我要不要尝试一下询问了 1 月份三面为啥会挂有没有学习 ai 知识(因为字节这边后端岗位偏 ai),我来到百度之后全面拥抱 AI 也认识了我的好兄弟 X 哥,他在百度 XX 部门 Agent 实习,他属于是我 Agent 的启蒙老师,来百度之后一直在了解 AI 这一块,我就接受了字节的面试,一面的时候 20 分钟实习拷打然后突然说 30 分钟代码考核我心就凉了以为是 kpi,算法题是手撕高并发安全下的令牌桶限流器,我写了整整 80 多行代码最后也写出来了,但是从来没看到过出这种题能 oc 的我也就不管了,后边面试也是很顺利但是流程有点长可能一直在横向吧总结结果是好的!!!感谢这一年努力的自己和遇到的各位互联网大佬分享的知识!!!ps 图二纯感慨 (觉得🍬请不要喷我)欢迎大家一起交流学习呀!!!!
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务