摘要在使用树莓派的时候,我们常常需要定时来执行一些任务,这篇文章就叙述一下如何编辑crontab,及一些要注意的地方。
树莓派定时执行脚本,可以通过如下指令,进入事件编辑功能
编辑crontab任务
sudo crontab -e #编辑crontab任务
sudo crontab -l #查看现在已有的crontab任务
进入界面后,可以参考网上的一些文章,看其要求的格式
http://ju.outofmemory.cn/entry/68682
https://www.raspberrypi.org/documentation/linux/usage/cron.md
crontab的一些例子
关于命令的一些解释,可以看下面的这张图片:
关于星期取值范围的解释
关于星期,0和7都是表示星期日;
0 - Sun Sunday
1 - Mon Monday
2 - Tue Tuesday
3 - Wed Wednesday
4 - Thu Thursday
5 - Fri Friday
6 - Sat Saturday
7 - Sun Sunday
下面是一个总体的图像:
┌────────── minute (0 - 59)
│ ┌──────── hour (0 - 23)
│ │ ┌────── day of month (1 - 31)
│ │ │ ┌──── month (1 - 12)
│ │ │ │ ┌── day of week (0 - 6 => Sunday - Saturday, or
│ │ │ │ │ 1 - 7 => Monday - Sunday)
↓ ↓ ↓ ↓ ↓
* * * * * command to be executed
例子
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
#上面的例子表示每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
#上面的例子表示每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
#上面的例子表示每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
#上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
#上面的例子表示每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
#每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
#晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
#每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
#一月一号的4点重启apache
重启crontab服务
编辑完毕后,很重要的一点是一定要执行如下命令
sudo /etc/init.d/cron restart
否则,你的定时命令不会执行。
另外,就要看好,你的树莓派的时间跟自己的时间是否对上。可以通过如下指令查询
date
一些遇到的问题
mysqldump doesn't work in crontab
除了下面的方法,还可以这么来写,即使用 $(date +%Y-%m-%d):
tar -czf /home/backup/$(date +%Y-%m-%d).tar.gz /var/log 2>err.log
mysqldump在定时任务中不工作,可以参考下面的连接:
解决办法:在%前面加上\进行转意;
Original:
mysqldump -u 'username' -p'password' DBNAME > /home/eric/db_backup/liveDB_`date +%Y%m%d_%H%M`.sql
Edited:
mysqldump -u 'username' -p'password' DBNAME > /home/eric/db_backup/liveDB_`date +\%Y\%m\%d_\%H\%M`.sql