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

王 茂南 2017年12月26日20:57:53
评论
2 3091字阅读10分18秒
摘要在使用树莓派的时候,我们常常需要定时来执行一些任务,这篇文章就叙述一下如何编辑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 运行 Python 脚本

下面介绍使用 crontab 运行 python 脚本,同时需要启动 conda 环境。要在 crontab 中运行 shell 脚本并激活 conda 环境,需要确保脚本可以找到 conda 的路径,并且在非交互式环境中正确地初始化 conda 环境。以下是一个示例脚本,它可以在 crontab 中运行:

  1. #!/bin/bash
  2. # 设置 conda 的路径,通常是在你的 home 目录下的 miniconda 或 anaconda 文件夹中
  3. # 你需要根据你的实际安装位置来修改这个路径
  4. CONDA_HOME="$HOME/miniconda3"
  5. # 初始化 conda 环境
  6. # 这将确保在脚本运行时 conda 被正确初始化
  7. source "$CONDA_HOME/etc/profile.d/conda.sh"
  8. # 激活你的 conda 环境,替换 'mptool' 为你的环境名
  9. conda activate mptool
  10. # 输出当前激活的 conda 环境,这一步是可选的
  11. echo "Activated conda environment: $(conda info --envs | grep \* | cut -d ' ' -f1)"
  12. # 运行 python 脚本
  13. python /home/mptool/add_article.py
  14. # 如果你想记录脚本的输出,可以将输出重定向到一个文件中
  15. # python /home/mptool/add_article.py >> /path/to/your/logfile 2>&1

需要将这个脚本保存为一个文件,比如 run_mptool.sh,并给予它执行权限:

  1. chmod +x run_mptool.sh

然后,可以在 crontab 中设置定时任务来运行这个脚本。打开 crontab 的配置:

  1. crontab -e

并添加一行来定时运行上面的脚本,例如每天凌晨 1 点运行:

  1. 0 1 * * * /path/to/run_mptool.sh

 

重启 crontab 服务

编辑完毕后,很重要的一点是一定要执行如下命令,否则,你的定时命令不会执行。

  1. sudo /etc/init.d/cron restart

使用下面的命令来查看 crontab 服务的状态:

  1. sudo /etc/init.d/cron status

除了上面的方式,也可以使用 service 进行重启:

  1. service cron status
  2. service cron stop
  3. service cron start

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

  1. date

 

一些遇到的问题

输出日志

有的时候我们需要将运行的结果保存在日志中,方便我们查看运行的结果。如下所示:

  1. */1 * * * * /root/XXXX.sh > ~/load.log 2>&1

 

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
王 茂南
  • 本文由 发表于 2017年12月26日20:57:53
  • 转载请务必保留本文链接:https://mathpretty.com/8823.html
匿名

发表评论

匿名网友 填写信息

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