需要定时处理的场景还是比较多的,比如信息推送、日志清理等。
这篇文章我们来说说如何使用cron来实现定时处理,以及监控任务的执行。
使用
Ubuntu中使用cron,要用到的命令是crontab。不加sudo时,处理的是个人的定时任务。当加上sudo时,处理的则是系统级别的定时任务。下面介绍一些常用的参数。
查看cron作业,
crontab -l
编辑crontab文件,
crontab -e
当执行这个命令时,会看到建议使用的的编辑器列表
对于我来说使用vim够用了。
然后是编辑cron作业,crontab文件中一行代表一个作业,作业的格式如下
* * * * * command_to_be_executed
其中
- 星号代表时间字段,从左至右分别是分钟、小时、日期、月份、星期几。
- 星号也可以替换为数字、星号(表示任意值)、逗号(表示多个值)和连字符(表示范围)。
监控
当我们设置了定时任务,肯定要监控任务的执行状态。这个时候有比较多的选择。
不依赖外部组件的话,我们可以将定时任务执行的日志保存到指定的日志文件中,即使用如下的方式定义定时任务
0 3 * * * /path/to/myscript.sh >> /path/to/mylog.log 2>&1
也可以直接使用系统日志,不进行配置,查看系统日志的命令如下
cat /var/log/syslog | grep CRON
如果想用外部组件,则可以考虑使用Prometheus、Grafana等监控工具。
实例
比如我们需要每周五下午五点拉取阮一峰大佬的周刊文件,可以首先编写一个脚本,假定叫pull_weekly.sh
sudo vi pull_weekly.sh
写入内容
#!/bin/bash
repo_dir="/usr/local/download/ruanyf"
if [ -d "$repo_dir/.git" ]; then
# 如果目录存在且是一个Git仓库,则执行git pull
cd "$repo_dir"
git pull
else
# 否则,执行git clone
git clone https://github.com/ruanyf/weekly "$repo_dir"
fi
然后我们建立文件夹,并修改目录拥有者。注意我的当前目录是/usr/local/download
sudo mkdir ruanyf
sudo chown cy:cy /usr/local/download/ruanyf/
赋予脚本执行权限
sudo chmod +x pull_weekly.sh
注意先执行一下验证执行是否OK。
添加定时任务
crontab -e
添加一行内容
0 17 * * 5 /usr/local/download/pull_weekly.sh
然后定时任务将会按时执行
小结
在这篇内容中,我们学习了cron命令的使用。常用的定时任务都可以用它来实现。