命令
crontab -e 进入定时任务编辑
crontab -l 查看当前定时任务
crontab -r 删除所有定时任务
添加定时任务格式
使用 crontab -e 进入定时任务添加
基本格式 :
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
例如:
# 每分钟执行 test.py 文件,文件要写绝对路径
* * * * * python /users/root/test.py
# 每天早上10点重启 MySQL
0 10 * * * mysql.server restart
入坑原因
- 执行 crontab -e ,报错
crontab: no crontab for root - using an empty one
crontab: "/usr/bin/vi" exited with status 1
- 原因:未指定编辑器
- 解决方案:
在 ~/.bashrc 中添加
EDITOR=vi
export EDITOR
之后记得再执行
source ~/.bashrc
注:如果你使用zsh, 记得更改的是 ~/.zshrc
- 定时脚本使用 python 报错 /bin/sh: python3: command not found
- 原因:找不到 python3 ,我这里是因为Mac上自带的是 python2,python3 是后来装的,直接写python3 不识别
- 解决方式:最直接的方式是写成 python3 的绝对路径,这个可以用 which python3 查看
例如执行crontab -e 后写入:
* * * * * /Library/Frameworks/Python.framework/Versions/3.5/bin/python3 /users/root/test.py
- 定时脚本中的 print 是不会输出到终端中的,这个可以在 mail 中查看,Mac 直接执行 mail 命令即可,该文件存储在 /var/mail/root 中,最方便的是指定输出内容的文件,命令如下:
将 test.py 中的print输出的内容写入 test.log 文件中
* * * * * /Library/Frameworks/Python.framework/Versions/3.5/bin/python3 /users/root/test.py > /users/root/test.log
- crontab 编码错误
错误提示:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
原因:crontab 和 shell 的执行环境不一样
我本机中shell使用的是zsh
shell中执行
which zsh
--->/bin/zsh
echo $LANG
--->zh_CN.UTF-8
解决方法:
crontab -e 中添加
SHELL=/bin/zsh
LANG=zh_CN.UTF-8