树莓派执行定时任务(crontab)

  • A+
所属分类:树莓派
摘要在使用树莓派的时候,我们常常需要定时来执行一些任务,这篇文章就叙述一下如何编辑crontab,及一些要注意的地方。

树莓派定时执行脚本,可以通过如下指令,进入事件编辑功能

编辑crontab任务

  1. sudo crontab -e #编辑crontab任务
  2. sudo crontab -l #查看现在已有的crontab任务

进入界面后,可以参考网上的一些文章,看其要求的格式

  • http://ju.outofmemory.cn/entry/68682
  • https://www.raspberrypi.org/documentation/linux/usage/cron.md

 

crontab的一些例子

关于命令的一些解释,可以看下面的这张图片:

树莓派执行定时任务(crontab)

关于星期取值范围的解释

参考资料:https://stackoverflow.com/questions/18919151/crontab-day-of-the-week-syntax

关于星期,0和7都是表示星期日;

  1. 0 - Sun      Sunday
  2. 1 - Mon      Monday
  3. 2 - Tue      Tuesday
  4. 3 - Wed      Wednesday
  5. 4 - Thu      Thursday
  6. 5 - Fri      Friday
  7. 6 - Sat      Saturday
  8. 7 - Sun      Sunday

下面是一个总体的图像:

  1. ┌────────── minute (0 - 59)
  2. │ ┌──────── hour (0 - 23)
  3. │ │ ┌────── day of month (1 - 31)
  4. │ │ │ ┌──── month (1 - 12)
  5. │ │ │ │ ┌── day of week (0 - 6 => Sunday - Saturday, or
  6. │ │ │ │ │                1 - 7 => Monday - Sunday)
  7. ↓ ↓ ↓ ↓ ↓
  8. * * * * * command to be executed

例子

  1. 30 21 * * * /usr/local/etc/rc.d/lighttpd restart
  2. #上面的例子表示每晚的21:30重启apache。
  3. 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
  4. #上面的例子表示每月1、10、22日的4 : 45重启apache。
  5. 10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
  6. #上面的例子表示每周六、周日的1 : 10重启apache。
  7. 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
  8. #上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
  9. 0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
  10. #上面的例子表示每星期六的11 : 00 pm重启apache。
  11. * */1 * * * /usr/local/etc/rc.d/lighttpd restart
  12. #每一小时重启apache
  13. * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
  14. #晚上11点到早上7点之间,每隔一小时重启apache
  15. 0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
  16. #每月的4号与每周一到周三的11点重启apache
  17. 0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
  18. #一月一号的4点重启apache

 

重启crontab服务

编辑完毕后,很重要的一点是一定要执行如下命令

sudo /etc/init.d/cron restart

否则,你的定时命令不会执行。

另外,就要看好,你的树莓派的时间跟自己的时间是否对上。可以通过如下指令查询

date

 

一些遇到的问题

mysqldump doesn't work in crontab

除了下面的方法,还可以这么来写,即使用 $(date +%Y-%m-%d):

  1. tar -czf /home/backup/$(date +%Y-%m-%d).tar.gz /var/log 2>err.log

mysqldump在定时任务中不工作,可以参考下面的连接:

mysqldump doesn't work in crontab

解决办法:在%前面加上\进行转意;

  1. Original:
  2. mysqldump -u 'username' -p'password' DBNAME > /home/eric/db_backup/liveDB_`date +%Y%m%d_%H%M`.sql
  3. Edited:
  4. mysqldump -u 'username' -p'password' DBNAME > /home/eric/db_backup/liveDB_`date +\%Y\%m\%d_\%H\%M`.sql

 

 

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: