树莓派定时执行脚本,可以通过如下指令,进入事件编辑功能。
文章目录(Table of Contents)
编辑 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的一些例子
关于命令的一些解释,可以看下面的这张图片:
关于星期取值范围的解释
参考资料:https://stackoverflow.com/questions/18919151/crontab-day-of-the-week-syntax
关于星期,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 运行 Python 脚本
下面介绍使用 crontab 运行 python 脚本,同时需要启动 conda 环境。要在 crontab 中运行 shell 脚本并激活 conda 环境,需要确保脚本可以找到 conda 的路径,并且在非交互式环境中正确地初始化 conda 环境。以下是一个示例脚本,它可以在 crontab 中运行:
- #!/bin/bash
- # 设置 conda 的路径,通常是在你的 home 目录下的 miniconda 或 anaconda 文件夹中
- # 你需要根据你的实际安装位置来修改这个路径
- CONDA_HOME="$HOME/miniconda3"
- # 初始化 conda 环境
- # 这将确保在脚本运行时 conda 被正确初始化
- source "$CONDA_HOME/etc/profile.d/conda.sh"
- # 激活你的 conda 环境,替换 'mptool' 为你的环境名
- conda activate mptool
- # 输出当前激活的 conda 环境,这一步是可选的
- echo "Activated conda environment: $(conda info --envs | grep \* | cut -d ' ' -f1)"
- # 运行 python 脚本
- python /home/mptool/add_article.py
- # 如果你想记录脚本的输出,可以将输出重定向到一个文件中
- # python /home/mptool/add_article.py >> /path/to/your/logfile 2>&1
需要将这个脚本保存为一个文件,比如 run_mptool.sh
,并给予它执行权限:
- chmod +x run_mptool.sh
然后,可以在 crontab 中设置定时任务来运行这个脚本。打开 crontab 的配置:
- crontab -e
并添加一行来定时运行上面的脚本,例如每天凌晨 1 点运行:
- 0 1 * * * /path/to/run_mptool.sh
重启 crontab 服务
编辑完毕后,很重要的一点是一定要执行如下命令,否则,你的定时命令不会执行。
- sudo /etc/init.d/cron restart
使用下面的命令来查看 crontab
服务的状态:
- sudo /etc/init.d/cron status
除了上面的方式,也可以使用 service 进行重启:
- service cron status
- service cron stop
- service cron start
另外,就要看好,你的树莓派的时间跟自己的时间是否对上。可以通过如下指令查询:
- date
一些遇到的问题
输出日志
有的时候我们需要将运行的结果保存在日志中,方便我们查看运行的结果。如下所示:
- */1 * * * * /root/XXXX.sh > ~/load.log 2>&1
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在定时任务中不工作,可以参考下面的连接:
mysqldump doesn't work in crontab
解决办法:在%前面加上\进行转意;
- 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
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论