## contOS crontab 定时执行python脚本
#### 安装crontab
```python
yum install crontabs
```
#### crontab语法
- 常用系统命令
```python
ntsysv //查看系统开机启动项
chkconfig crond on //添加开机自启
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看crontab服务状态
cat /var/log/cron //查看运行日志
```
- 参数说明
```python
minute hour day month week command 顺序:分 时 日 月 周
```
- minute:表示分钟,可以是从0到59之间的任何整数。
- hour:表示小时,可以是从0到23之间的任何整数。
- day:表示日期,可以是从1到31之间的任何整数。
- month:表示月份,可以是从1到12之间的任何整数。
- week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
- command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
-
**在以上各个字段中,还可以使用以下特殊字符:**
- 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
- 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
- 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
- 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
**例:在每天的23点30分执行脚本,并同时输出执行错误日志到log文件**
```python
30 23 * * * python /home/***/***/test.py >> /home/***/***/test.log 2>&1
```
```python
30 21 * * * /etc/init.d/nginx restart //每晚的21:30重启 nginx。
45 4 1,10,22 * * /etc/init.d/nginx restart //每月1、 10、22日的4 : 45重启nginx。
10 1 * * 6,0 /etc/init.d/nginx restart //每周六、周日的1 : 10重启nginx。
0,30 18-23 * * * /etc/init.d/nginx restart //每天18 : 00至23 : 00之间每隔30分钟重启nginx。
0 23 * * 6 /etc/init.d/nginx restart //每星期六的11 : 00 pm重启nginx。
* */1 * * * /etc/init.d/nginx restart //每一小时重启nginx
* 23-7/1 * * * /etc/init.d/nginx restart //晚上11点到早上7点之间,每 隔一小时重启nginx
0 11 4 * mon-wed /etc/init.d/nginx restart //每月的4号与每周一到周三 的11点重启nginx
0 4 1 jan * /etc/init.d/nginx restart //一月一号的4点重启nginx
*/30 * * * * /usr/sbin/ntpdate 210.72.145.20 //每半小时同步一下时间
```
#### 修改crontab配置文件
- 方法一:直接输入命令 crontab -e
crontab默认使用vi编辑器,系统没vi编辑器会提示以下错误,可直接切换至配置文件目录下编辑
crontab配置文件都被保存在 **/var/spool/cron** 目录中
```python
[root@VM_0_5_centos log]# crontab -e
/bin/sh: /usr/bin/vi: No such file or directory
crontab: "/usr/bin/vi" exited with status 127
[root@VM_0_5_centos log]#
```
crontab配置文件内容:
```python
1*/1 * * * * /usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &
2 0 0 * * * /usr/local/qcloud/YunJing/YDCrontab.sh > /dev/null 2>&1 &
3 * * * * * python /DouYinVersion/spider.py # 每分钟运行一次spider.py
```
- 方法二:修改**/etc/crontab**配置文件
**/etc/crontab 比 crontab -e 多了一个用户名字段,该方法是系统级的,必须root权限使用**
```python
1 SHELL=/bin/bash
2 PATH=/sbin:/bin:/usr/sbin:/usr/bin
3 MAILTO=root
4
5 # For details see man 4 crontabs
6
7 # Example of job definition:
8 # .---------------- minute (0 - 59)
9 # | .------------- hour (0 - 23)
10 # | | .---------- day of month (1 - 31)
11 # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
12 # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
13 # | | | | |
14 # * * * * * user-name command to be executed
15 * * * * * root python /DouYinVersion/spider.py # 每分钟运行一次spider.py
```
****
#### 坑点:
- 命令参数问题
每项参数后面都有一个空格
- 路径问题
python解释器路径使用绝对路径 **查询python解释器路径: which python**
脚本文件使用决定路径 **查询脚本路径:find / -name xxx.py**
**重要的事情说三遍:**
```python
**脚本代码中必须使用绝对路径**
**脚本代码中必须使用绝对路径**
**脚本代码中必须使用绝对路径**
```
- **配置完成不能正常运行可查看/var/spool/mail 目录下的运行日志**
****
**本文仅供学习交流使用,如侵立删!
企鹅 : 1033383881**
******