版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wenqiang1208/article/details/82823283
Linux下的crontab命令:可以用来定时的去跑一些脚本或者程序
crontab的命令
crontab [-u user] file crontab [-u user] [ -e | -l | -r ]
- -u user:用来指定某个用户
- file:file 是你编写的crontab的任务列表。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
- -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
- -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
- -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
- -i:在删除用户的crontab文件时给确认提示
注意:-r,-i 还是尽量不要执行
最常用的就是crontab -l:列出当前的crontab 任务
crontab -e: 编辑crontab任务
crontab的文件格式
分 时 日 月 星期 要运行的命令
[* * * * * ]
第1列分钟0~59
第2列小时0~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~7(0和7表示星期天)
第6列要运行的命令
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
- “*” 代表取值范围内的数字
- “/” 代表”每”
- “-” 代表从某个数字到某个数字
- “,” 分开几个离散的数字
举例子
1、每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
2、晚上11点到早上7点之间,每隔一小时重启smb
0 23-7 * * * /etc/init.d/smb restart
3、每一小时重启smb
* */1 * * * /etc/init.d/smb restart
ps:注意 2和3的区别 ,第一个秒 是 星号* 和0
4、在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
运行脚本的环境变量(py或者 shell脚本)
1、脚本中涉及到的文件路径 一定要写全局路径
2、脚本执行要用到java或其他环境变量时,通过source命令引入环境变量
编写一个file文件中,存放环境变量 然后在脚本中source 引入该文件
3、直接在crontab 中引入环境
举例子:项目全局路径,虚拟环境的全局路径, 执行脚本的全局路径
```
0 */6 * * * PYTHONPATH=项目的全局路径 /xxx/env/bin/python test.py && echo 'success at' `date` >> /xxxx/cronjob/hubble.log 2>&1
```
输出日志
“/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。
注意事项
crontab 完成后 不会立即启动,一般2分钟之后才有效