crontab 定时任务 以及常见错误

命令

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

你可能感兴趣的:(linux)