crontab

0.查看日志
tail -f /var/log/cron

1.确保系统服务启动
systemctl status crontab

2、修改/etc/crontab
每天凌晨三点,执行123.sh脚本文件,正确的和错误的日志都输出到123.log文件中
0 3 * * *  /bin/bash  /usr/local/sbin/123.sh >/tmp/123.log 2>/tmp/123.log
因为是每天三点执行脚本,所以可以写成追加,每天都去记录日志
0 3 * * *  /bin/bash  /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log
每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。 例如,可以在crontab文件中设置如下形式,忽略日志输出:
0 3 * * *  /bin/bash  /usr/local/sbin/123.sh >/dev/null 2>&1
“/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。

3.etc/crontab解释
----------
SHELL=/bin/bash
#SHELL变量指定了系统要使用哪个shell,这里是bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
#PATH变量指定了系统执行命令的路径
MAILTO=root
#MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户
# For details see man 4 crontabs

# 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    //星期,0或7都表示周日,也可以写成英文的简写
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed    //用户,不写用户就是root 最后一列,是你要执行的命令
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

#为什么没有年份?
#用星期确定你的唯一性,比如说今年的6月18号和明年的6月18号的星期肯定是不同的,这样就可以确定某一天的唯一性
----------
4.注意事项

1. 注意环境变量问题
# 脚本中涉及文件路径时写全局路径;
# 脚本执行要用到java或其他环境变量时,通过source命令引入环境变量:source /etc/profile
2.命令的执行最好用脚本
3.脚本权限加/bin/sh,规范路径/server/scripts
4.时间变量用反斜线转义,最好用脚本
5.定时任务添加注释
6.>/dev/null 2>&1   ==>&>/dev/null,别随意打印日志文件
7.定时任务里面的程序脚本尽量用全路径
8.避免不必要的程序以及命令输出
9.定时任务之前添加注释
10.打包到文件目录的上一级

posted @ 2019-11-13 14:37  左岸丶  阅读(156)  评论(0编辑  收藏  举报