crontab定时任务
crontab是用来定期执行程序的命令。在MacOS和Linux上都有广泛的使用。
CRON表达式
CRON表达式是一个字符串,包含五个到七个由空格分隔的字段(每种软件不一样),表示一组时间,通常作为执行某个程序的时间表。 注释以注释标记#开始,并且必须单独在一行上。
例子:
# 每月的最后1天
0 0 L * * *
说明:
Linux
* * * * *
- - - - -
| | | | |
| | | | +----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | +---------- month (1 - 12) OR jan,feb,mar,apr ...
| | +--------------- day of month (1 - 31)
| +-------------------- hour (0 - 23)
+------------------------- minute (0 - 59)
字段 | 是否必填 | 允许值 | 允许特殊字符 | 备注 |
---|---|---|---|---|
Seconds | 是 | 0–59 | *,- | 标准实现不支持此字段。 |
Minutes | 是 | 0–59 | *,- | |
Hours | 是 | 0–23 | *,- | |
Day of month | 是 | 1–31 | *,-?LW | ?LW只有部分软件实现了 |
Month | 是 | 1–12 or JAN–DEC | *,- | |
Day of week | 是 | 0–6 or SUN–SAT | *,-?L# | ?L#只有部分软件实现了 |
Year | 否 | 1970–2099 | *,- | 标准实现不支持此字段。 |
快速开始
1.查看crontab是否启动
sudo launchctl list | grep cron
187 0 com.vix.cron
2.查看database是否存在
$ locate com.vix.cron
WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
Please be aware that the database can take some time to generate; once
the database has been created, this message will no longer appear.
如果出现上述问题,则需要创建database
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
3.查看/etc/crontab是否存在
ll /etc/crontab
如果不存在,则创建
sudo touch /etc/crontab
常用的命令
# 修改
crontab -e
# 查看
crontab -l
# Linux
sudo service crond start #启动服务
sudo service crond stop #关闭服务
sudo service crond restart #重启服务
# MacOs
sudo /usr/sbin/cron start #启动服务
sudo /usr/sbin/cron stop #关闭服务
sudo /usr/sbin/cron restart #重启服务
日志重定向
不做任何处理日志会保存到/var/mail/Username文件夹下。 可以用2>&1来重定向日志保存路径。
*/1 * * * /usr/local/bin/python3 /Users/admin/Documents/hacpai/hacpai.py >> "/Users/admin/Documents/hacpai/log/$(date +"\%Y-\%m-\%d_\%H").log" 2>&1
常见问题
1.定时任务执行失败
这时我们可以去上面讲到的日志位置,查看为什么执行执行失败了,根据异常日志分析原因。
2.在终端内可以执行,但在定时任务中执行失败
这种情况多出现于该命令依赖于系统环境变量配置的场景
由于corntab不会自动读取系统的环境变量配置,所以我们需要使用全路径,或者配置系统环境变量到定时任务中
使用环境变量:
0 0 * * * . /Users/admin/.bash_profile; python3 /Users/admin/Documents/hacpai/hacpai.py
使用全路径:
0 0 * * * /usr/local/bin/python3 /Users/admin/Documents/hacpai/hacpai.py
Reference
Mac设置自启动以及定时任务
Mac下启动定时任务
Mac定时任务crontab不执行,手动可以执行crontab自动无法执行解决方法
macOS定时器crontab定时执行python脚本
crontab 中使用环境变量
转载
本文遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。