设为首页 收藏本站
查看: 1115|回复: 0

[经验分享] CentOS7定时任务配置与使用

[复制链接]

尚未签到

发表于 2018-4-19 14:45:20 | 显示全部楼层 |阅读模式
  
一、定时任务概念
  为什么要使用Crond定时任务?
  例如:我们数据库或者程序需要每天晚上0点做一次全备,定时同步时间服务器等等
  Linux系统定时任务软件的种类:
  at   适合仅执行一次就结束的调度命令,可以被crontab取代,
  crontab   可以周期性的执行任务,需要开启crond服务 在生产工作中最常用到的命令
  anacron   主要用于非7*24小时开机的服务器,
  提示:crond服务,crontab命令是生产工作中重要的命令应用,其他的很少使用,可以忽略
  重点学习crondtab定时任务
二、安装crond服务
yum -y update  yum -y install cronie yum-cron
  
三、定时任务使用
  
  指令语法:
  usage:  crontab [-u user] file
  crontab [-u user] [ -e | -l | -r ]
  (default operation is replace, per 1003.2)
  -e      (edit user's crontab)      编辑用户命令
  -l      (list user's crontab)       列表
  -r      (delete user's crontab)    删除用户任务
  -i      (prompt before deleting user's crontab)     在删除前确认
  -s      (selinux context)
  参数
  含义
  指定示例
  -l
  查看crontab文件内容,提示:l为list的缩写
  crontab -l
  -e
  编辑crontab文件内容,提示:e可为edit 的缩写
  crontab -e
  -i
  删除crontab文件内容,删除前会提示确认,用得少
  crontab -ri
  -r
  删除crontab文件内容。用得很少
  crontab -r
  -u
  指定使用的用户执行任务
  crontab -u boy -l
  特别强调:-I –r参数在生产中很少用,没什么需求必须要用-e进去编辑即可
  补充:crontab {-l|-e}实际上就是在操作/var/spool/cron/当前用户这样的文件
  通过crontab可以在固定的时间执行指定的系统指令,时间单位可以是分钟、小时、日、月、周以及以上的任意组合,(日和周不要组合)
  crond是一个服务,crontab是一个命令
  crond服务通过crontab命令可以很容易的实现周期性的日志分析或数据备份等运维场景工作。
  使用者权限及定时任务文件
  文件
  说明
  /etc/cron.deny
  该文件中所列用户不允许使用crontab命令
  /etc/cron.allow
  该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny
  /var/spool/cron/
  所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名
  
  crontab -l  查看当前用户定时任务
  调用/var/spool/cron/目录下相关用户的定时任务信息
[iyunv@localhost log]# cat /var/log/cron  查看定时任务日志

  
  Crontab定时任务的书写格式
  用户的定时任务一般分为6段(每段空格分隔,系统的定时任务则/etc/crontab分为7段),前五段为时间的设定段,第六段为所要执行的命令或脚本任务段
  基本格式如下:
  01 * * * * cmd
  02 4 * * * cmd
  22 4 * * 0 cmd
  42 4 1 * * cmd
  提示:
  1.cmd为要执行的命令或脚本,如/bin/sh    /server/scripts/dingjian.sh
  2.每个段之间必须要有空格
  段
  含义
  取值范围
  第一段
  代表分钟
  00-59
  第二段
  代表小时
  00-23
  第三段
  代表日期
  01-31
  第四段
  代表月份
  01-12
  第五段
  代表时期
  0-7(0和7都代表是星期日)
  提示:时间记忆口决:分时日月周
  Crontab语法格式中特殊符号含义如表:
  特殊符号
  含义
  *
  *号,表示任意时间都,也是”每”的意思,举例:如00 23 * * *cmd表示每月每周每日的23:00都执行cmd任务
  -
  减号,表示分隔符,表示一个时间段范围段,如17-19点,每小时的00分执行任务,00 17-19 * * * cmd 。就是17,18,19点整点分别执行的意思
  ,
  逗号,表示分隔时段的意思,30 17,18,19 * * * /bin.sh /scripts/dingjian.sh表示每天17,18和19点的半点时刻执行/scripts/dingjian.sh脚本。也可以和”-”结合使用,如:30 3-5,17-19 * * * /scripts/dingjian.sh
  /n
  N代表数字,即”每隔n单位时间”,如:每10分钟执行一次任务可以写成
  */10 * * * * cmd,其中“*/10”的范围是0-59,因此也可以写成0-59/10
  
DSC0000.jpg

  cron服务是Linux的内置服务,但它不会开机自动启动。可以用以下命令启动和停止服务:
/sbin/service crond start/sbin/service crond stop/sbin/service crond restart/sbin/service crond reload/sbin/service crond status  或
  查看crond.service的启动状态
stemctl status crond.service  开启crond.service服务命令
systemctl start crond.service  停止crond.service服务命令
systemctl stop crond.service  把cron服务加入linux开机自启动:
[iyunv@localhost ~]# systemctl enable crond.service

[iyunv@localhost ~]# systemctl is-enabled crond.service

  enabled
  ps -ef |grep crond|grep -v grep      #crond后台的工作情况并过滤出来
[iyunv@dingjian ~]# ps -ef |grep crond|grep -v grep

  root      1091     1  0 Nov19 ?        00:00:17 crond
  查看当前用户的crontab,输入 crontab -l;
  编辑crontab,输入  crontab -e;
  清空定时任务crontab,输入 crontab -r
四、定时任务范例
  范例1:每5分钟同步一次系统时间
  echo '#time sync by mrxiong at 2018-3-10'>/var/spool/cron/root
  echo '*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1' >>/var/spool/cron/root
  或者 crontab –e 然后把
  #time sync by mrxiong at 2018-3-10
  */5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1
  加入到里面保存退出
五、应用场景定时任务应用范例
  例1:每分钟打印一次自己的名字拼音全拼到”/server/log/自己的名字命名的文件”中。
  解答:
  方法1:crontab -e   输入以下内容
  #pring a name by mrxiong
  * * * * * echo "mrxiong" >>/service/log/mrxiong
  保存退出
[iyunv@localhost ~]# tail -f /service/log/mrxiong

  mrxiong
  用tail -f 命令跟踪文件内容
  方法2:
  * * * * * echo "huanweixiong-->>  $(date +\%F" "\%T)" >>/service/log/dingjian
  提示:在任务中,%前面一定要加转义\
  如果不用转义,可以用另一种方法:
  用脚本的方式:
[iyunv@localhost scripts]# echo "echo 'blog.dingjian.me -->> $(date +%F" "%T)'>>/server/log/dingjian.log" >echo.sh

[iyunv@localhost scripts]# cat echo.sh

  echo 'blog.dingjian.me -->>2018-1-30 19:30:33'>>/server/log/dingjian.log
[iyunv@localhost scripts]# sh echo.sh

[iyunv@localhost scripts]# cat /server/log/dingjian.log

  blog.dingjian.me -->> 2018-1-30 19:28:38
  blog.dingjian.me -->> 2018-1-30 19:28:53
  blog.dingjian.me -->> 2018-1-30 19:28:53
  blog.dingjian.me -->> 2018-1-30 19:30:33
  /var/log/cron  定时任务的日志目录
  例2:每周六、日上午9:00和下午14:00执行mrxiong.sh(/server/script/mrxiong.sh)
  答案:
  #cron job for ett by mrxiong 2018-12-12
  00 9,14 * * 6,0 /server/script/mrxiong.sh >/dev/null 2>&1
  例3:每隔1分钟,打印一个+号到dingjian.log,请给出crontab完整命令。
  解答:
  生成脚本:
[iyunv@localhost scripts]# echo '#!/bin/sh' >>./echo.sh

[iyunv@localhost scripts]# echo 'echo + >>/tmp/dingjian.log' >>./echo.sh

[iyunv@localhost scripts]# cat echo.sh

  #!/bin/sh
  echo + >>/tmp/dingjian.log
  测试配置好的脚本:
[iyunv@localhost scripts]# sh echo.sh

[iyunv@localhost scripts]# sh echo.sh

[iyunv@localhost scripts]# sh echo.sh

[iyunv@localhost scripts]# cat /tmp/dingjian.log

  +
  +
  +
  +
  配置定时任务:
[iyunv@localhost scripts]# echo '#print a "+" to /tmp/dingjian.log by dingjian 2018-11-28' >>/var/spool/cron/root

[iyunv@localhost scripts]# echo '*/1 * * * * /bin/sh /server/scripts/echo.sh >/dev/null 2>&1' >>/var/spool/cron/root

[iyunv@localhost scripts]# crontab -l      #查看定时任务例表

  #print a "+" to /tmp/dingjian.log by dingjian 2018-11-28
  */1 * * * * /bin/sh /server/scripts/echo.sh >/dev/null 2>&1
  查看定时任务结果 :
[iyunv@localhost scripts]# cat /tmp/dingjian.log

  +
  +
[iyunv@localhost scripts]# watch cat /tmp/dingjian.log

  提示:watch    默认每两分钟查看后面的命令
  如:  watch cat /tmp/dingjian.log   查看文件
  watch ls -l /tmp            查看目录
  范例2:每隔2个小时,将/etc/services文件打包备份到/tmp下(最好每次备份成不同的备份包)
  答:
  #生成脚本:
[iyunv@localhost ~]# cd /server/scripts/

[iyunv@localhost scripts]# ll

  total 4
  -rw-r--r--. 1 root root 66 Nov 26 21:26 tar.sh
[iyunv@localhost scripts]# vi tar.sh

  在脚本中加入:
  cd /etc/
  tar zcf /tmp/service_$(date +%Y%m%d%H%M).tar.gz ./services
[iyunv@localhost scripts]# rm /tmp/* -rf

  #测试脚本能不能运行
[iyunv@localhost scripts]# sh tar.sh

[iyunv@localhost scripts]# ls -l /tmp

  total 128
  -rw-r--r--. 1 root root 127319 Nov 27 00:29 service_2018112700.tar.gz
  #配置定时任务:
[iyunv@localhost scripts]# crontab -e

  把以下内容加入:
  ####注释
  00 */2 * * * /bin/sh /server/scripts/tar.sh >/dev/null 2>&1
  保存退出
  提示:所以一般建议打包某一文件,  要到这个文件的上一层目录打包,不要从根目录打包,不然一解压会把根覆盖了 如:打包/etc/services.就进到/etc/目录来打包services,
[iyunv@dingjian scripts]# sh tar.sh&  加个&表示在后台运行这个脚本

  范例3:每天晚上12点,打包站点目录/var/www/html备份到/data目录下(最好每次备份按时间生成不同的备份包)
  解答:
[iyunv@localhost scripts]# mkdir /var/www/html -p     #创建测试环境

[iyunv@localhost scripts]# mkdir /data

[iyunv@localhost scripts]# date +%F       #命令测试

  2018-11-27
[iyunv@localhost scripts]# cd /var/www/

[iyunv@localhost www]# tar zcf /data/data_$(date +%F).tar.gz ./html  #注意打包要到要复制的

[iyunv@localhost www]# ls -l /data          文件的上一层目录打包

  total 4
  -rw-r--r--. 1 root root 111 Nov 27 01:13 data_2018-11-27.tar.gz
[iyunv@localhost www]# cd /server/scripts/      #将测试号的脚本放入到脚本测试

[iyunv@localhost scripts]# rm /data/* -rf

[iyunv@localhost scripts]# ls /data

[iyunv@localhost scripts]# vi tarhtml.sh           #创建脚本

  cd /var/www/
  tar zcf /data/data_$(date +%F).tar.gz ./html
[iyunv@localhost scripts]# sh /server/scripts/tarhtml.sh     #执行全路径测试脚本

[iyunv@localhost scripts]# ls /data

  data_2018-11-27.tar.gz
[iyunv@localhost scripts]# crontab -e           #编辑定时任务,注意规范书写

  #tar /var/www/html everyday by dingjian 2018-11-27
  00 00 * * * /bin/sh /server/scripts/tarhtml.sh >/dev/null 2>&1
[iyunv@localhost scripts]# crontab -l            #查看编辑的结果

  #tar /var/www/html everyday by dingjian 2018-11-27
  00 00 * * * /bin/sh /server/scripts/tarhtml.sh >/dev/null 2>&1
  特殊的调试
六、生产场景如何调试crontab定时任务
  1.增加执行频率调试任务
  调试时,把任务执行频率调快一点,如:每分钟、每5分钟执行一次,或者比当前时间推迟5分钟以后,看能否执行,如果正常没问题了,再改成需要的任务的执行时间。
  强调:有些任务是不允许频繁执行的,如:定时往数据库里插入数据,这样的任务就要在测试机上测试好,然后正式线上出问题的机会就少了。
  规范的公司开发和运维人员的操作流程:个人的开发配置环境--à办公室的测试环境-àidc机房的测试环境-àidc机房的正式环境
  
  2. 调整系统时间调试任务
  用正确的执行任务的时间,设置完成后,可以修改下系统当前时间,改成任务执行时间的前五分钟来测试(或者重启定时任务服务)。如:定时任务9:00执行,我们可以把系统时间改成8:55分,然后观察是不是正确执行。如果是生产环境服务器不要这样处理,测试环境可以使用这个手段
  3.通过日志输出调试定时任务
  在脚本中加入日志输入,然后把输出到指定的日志中,然后观察日志内容结果,看是否执行或正确执行,或把脚本结果定向到一个log文件里,重定向〉即可,不要用>>追加,这样晶习就不会一直变大
  如:定时任务中加输出
  #study task by dingjian at 20181129
  00 9,4 * * 6,0 /bin/sh /server/scripts/dingjian.sh >/tmp/log.log 2>&1
  脚本中加输出
[iyunv@dingjian scripts]# cat tar.sh

  #!/bin/sh
  cd /
  tar zcvf /tmp/etc_$(date +%Y%m%d%H).tar.gz ./etc >/tmp/tmp.log 2>&1
  4.注意一些任务命令带来的问题
  */ 1 * * * * echo “==” >>/tmp/dingjian.log >/dev/null 2>&1 这是隐蔽的无法正确执行的任务配置,原因是前面多了个>> , 或者去掉结尾的>/dev/null 2>&1
  强调:此问题是因为前面己有了重定向,后面要去掉>/dev/null 2>&1
  5. 在调试java程序任务的时候,注意环境变量,把环境变量的定义加到脚本里。
  例:
  #!/bin/sh
  export JAVA_HOME=/application/jdk1.6
  export PATH=$JAVA_HOME/bin:$PATH
  export SH_HOME=/application/resin/webapps/ROOT/
  export LIB=$SH_HOME/WEB-INF/lib
  ..省略部分...
  定时任务
  00 9,14 * * * nohup /scripts/resin/shell/Task.sh & >/app/log.log 2>&1
  6.通过定时任务日志调试定时任务
  查看定时任务服务日志
[iyunv@localhost scripts]# tail -f /var/log/cron

  Nov 29 01:39:01 dingjian CROND[8557]: (root) CMD (/bin/sh /server/scripts/echo.sh >/dev/null 2>&1)
  Nov 29 01:40:01 dingjian CROND[8566]: (root) CMD (echo "==" >>/tmp/dingjian1.log >/dev/null 2>&1)
  Nov 29 01:40:01 dingjian CROND[8567]: (root) CMD (/usr/lib64/sa/sa1 1 1)
  Nov 29 01:40:01 dingjian CROND[8568]: (root) CMD (/bin/sh /server/scripts/echo.sh >/dev/null 2>&1)
七、Crontab生产问题案例及解决过程
  No space left on device故障
  面试题:维护的时候,创建文件提示”No space left on device”,请问你这是什么故障:
  解答:磁盘空间block满了或者inode被占满了
  故障描述及说明:
  某年某月甘日某时,某人在工作中设置crontab定时任务规则保存时,提示” No space left on device”,此时用df -h检查磁盘,发现还有剩余空间,用df -I 检查则显示/var目录己占用100%的inode数量,看来是inode数量耗尽,导致系统无法在/var目录下创建文件,因为定时任务的配置在/var/spool/cron下,ext3文件系统中,每个文件需要占一个inode,
  No space left on device 故障解决办法:
  最后经过检查发现在/var/spool/clientmqueue/下有超多的文件,执行ls /var/spool/clientmqueue命令查看,很长时间没能显示出结果,执行cd /var/spool/clientmqueue;rm –f *会自动跳出来,也是无法删除,最后只能通过xargs命令来配合解决,清理实际命令为:cd /var/spool/clientmqueue&&ls|xargs rm –f
  在清理时,如果数量特别多的时候,执行ls|xargs rm –f 命令也会长时间无反应,那是命令在处理中,当然我们也可以使用更快的删除方法,如直接使用cd /var/spool&&rm –rf clientmqueue,删除上级目录,然后执行
  mkdir clientmqueue&&chmod 770 clientmqueue&&chown smmsp.smmsp -R /var/spool/clientmqueue
  修改回/var/spool/clientmqueue目录在系统中的原来默认权限
[iyunv@localhost scripts]# ls -ld /var/spool/clientmqueue/

  drwxrwx---. 2 smmsp smmsp 4096 Nov 26 15:41 /var/spool/clientmqueue/
  故障原因分析:
  当系统中crond定时任务执行程序有输出内容时,输出内容会以邮件形式发给crond的用户(默认是root),而sendmail等mail服务没有启动时,这些输出内容以为支在邮件队列临时目录,产生这些碎文件,导致消耗inode数量,一旦inode数量耗尽,就会导致系统无法写入文件,而报上述错误:No space left on device.
  亡羊补牢解决方法:
  1) 尽量将crontab里面的命令或脚本中的命令结尾加上>/dev/null 2>&1,或在做定时执行脚本时,把屏幕输出定向到指定文件里
  2) 当然也可以开启邮件服务,不过最好不做,因为邮件服务会带来安全问题
  3) 优化系统,加定时清理任务,如find /var/spool/clientmqueue/ -type f -mtime +30|xargs rm -f
八、Crontab定时任务生产应用问题8箴言
  1.export变量问题
  crontab执行shell时只能识别为数不多的系统环境变量,一般用户定义的普通变量是无法识别的,如果在编写的脚本中需要使用这些变量,最好使用export重新声明下该变量,脚本才能正常执行,如:生产 情况和java相关的服务任务和脚本
  2.任务路径问题:
  Crontab执行shell时,一定要用绝对路径
  3. 脚本权限问题
  要确保crontab的执行者有访问shell脚本所在目录并且执行此shell脚本的权限(可用chmod和chown修改脚本权限和所有者)。当然,最佳方法是执行脚本前加/bin/sh执行测试下,在配置任务执行脚本时,可以省略当前用户配置,但最好带上/bin/sh.否则有可能因为忘了为脚本设定执行权限,而无法完成任务
  范例:
  * * * * * /server/scripts/tar.sh    #此时如果tar.sh没有可执行权限,就无法执行了
  要在带上/bin/sh
  * * * * * /bin/sh /server/scripts/tar.sh
  4.时间变量问题
  %号在crontab任务中被认为是newline.需要用\来转义,crontab任务命令中,如果有”dat+%Y%m%d”,必须替换为: ”dat+\%Y\%m\%d”,但写脚本中就不需要了,
  范例:
  #tar commend by dingjian at 2013-11
  */1 * * * * /cd /etc/&&tar zcvf /tmp/service_$(date +\%Y\%m\%d\%H\%M).tar.gz ./services
  脚本实现方法:
  配置脚本:
  echo 'cd /etc/&&tar zcvf /tmp/service_$(date +%Y%m%d%H%M).tar.gz ./services'>./tar.sh
  配置定时任务
[iyunv@localhost scripts]# echo '#tar /etc/services by dingjian at 2018-11-29' >>/var/spool/cron/root

[iyunv@localhost scripts]# echo '*/1 * * * * /bin/sh /server/scripts/tar.sh >/dev/null 2>&1' >>/var/spool/cron/root

[iyunv@localhostscripts]# crontab -l

  #tar /etc/services by dingjian at 2013-11-29
  */1 * * * * /bin/sh /server/scripts/tar.sh >/dev/null 2>&1
  5.>/dev/nul 2>&1 问题
  当定时任务在你所指定的时间执行后,系统会寄一封信给你,显示该程式执行的内容,若系统未开启邮件服务就会导致邮件临时目录/var/spool/clientmqueue碎文件逐渐增多,以至于大量消耗inode数量,其实可以在每一行任务结尾空一行之后加上>/dev/nul 2>&1将输出定向为空来规避这个问题
  如果需要打印日志输出,也可以追加到指定的日志文件里,尽量不要留空。如果任务本身是命令的话,添加>/dev/nul 2>&1时要慎重,需多测试并且有检查手段。如:*/1 * * * *echo”==”>> /tmp/dingjian.log >/dev/nul 2>&1,该任务规则就是无法执行的。
  说明:/dev/null为特殊设备,表示黑洞设备或空设备。2>&1表示让标准错误或标准输出一样都定向到空设备,本命令内容就是把脚本的输出重定向到/dev/null,即不记录任务输出,也不给充管理员发邮件
  6.定时任务加注释
  加必要注释,英文注释: 如:什么人,什么时间,因为谁,做了什么事
  如:#cron job for ett by dingjian 2018-12-12
  00 9,14 * * 6,0 /bin/sh /server/script/dingjian.sh >/dev/null 2>&1
  7.使用脚本程序替代命令
  使用脚本执行任务可以让我们少范错误,提升效率、规范定时任务中执行命令,定时任务中执行命令有一些限制,如时间变量问题,多个重定向命令混用问题等
  8.避免不必要的程序输出
  在开发定时任务程序或脚本时,在调试好脚本程序后,应尽量把DEBUG及命令输出的内容信息屏蔽掉,如果不需要,可以定向到指定日志文件里,以免产生多余的系统垃圾
  如:平时打包喜欢tar zcvf 这个-v参数就是查看打包信息的,做成定时任务就不要输出了。
  范例:
  */1 * * * * cd /etc/&&tar zcvf /tmp/service.tar.gz ./services  这里的v参数就不必要的
九、crond export变量问题生产案例
  范例:
  我写了一个重启resin的脚本,由于业务原因,需要定时在某一个时间重启下resin服务器,于是就在
  crontab里配置了如下内容
  50 17 * * * 1-5 root /usr/local/bin/resin_restart.sh
  其中,resin_restart.sh内容如下:
  #!/bin/sh
  /usr/local/bin/xxresin_stop.sh
  /usr/local/bin/xxresin_start.sh
  问题来了,服务器虽然定时起来了,但是却报如下错误:

  Resin can`t load com.sun.tools.javac.Main. Usually this means that the JDK tools.jar is missing from the>  Possibly because of using a JRE instead of the JDK.

  You can either add tools, jar to the>  但是,明明己在profile里配置了环境变量,为啥还找不到呢,
  故障解决:
  由于export变量问题导致:具体为,crontab 执行shell时只能识别为数不多的系统环境 变量,
  普通环境变量一般是无法识别的,如果在编写的脚本中需要使用变量,最好使用export重新声时下该变量
  然后在resin重启脚本里重新定义了下环境变量,脚本如下:
  #!/bin/sh
  JAVA_HOME=”/opt/jdk1.6.0_18”
  CLASSPATH=$JAVA_HOME/lib/dt.jar;$JAVA_HOME/lib/tools.jar
  PATH=$JAVA_HOME/lib/dt.jar;$JAVA_HOME/lib/tools.jar;/opt/nginx-0.7.61/sbin;/jdk1.6.0_18/bin;/opt/resin-3.0.25/bin;$PATH

  export JAVA_HOME PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC>  /usr/local/bin/xxresin_stop.sh
  /usr/local/bin/xxresin_start.sh
十、定时任务的7个要领
  1. 加必要注释,英文注释: 如:什么人,什么时间,因为谁,做了什么事
  如:#cron job for ett by dingjian 2018-12-12
  00 9,14 * * 6,0 /bin/sh /server/script/dingjian.sh >/dev/null 2>&1
  2.执行shell脚本任务前加/bin/sh
  执行定时任务时,如果是执行脚本,在脚本前面带上/bin/sh命令   否则可能因忘了为脚本设定执行权限X,从而无法完成任务,所以凡是脚本任务,都要在前面加上/bin/sh
  如:#cron job for ett by dingjian 2018-12-12
  00 9,14 * * 6,0 /bin/sh /server/script/dingjian.sh >/dev/null 2>&1
  不管s.sh有没有x权限,都可以执行脚本文件
  
  3. 需要root权限执行的任务可以登陆到root用户下然后设置,如果不需要root权限,可以登陆到普通用户下(也可以直接在root下crontab -u oldboy -e 的写法直接设置),然后设置。这里要特别注意不同用户的环境变量问题,如果是调用了系统环境变量/etc/profile(如生产场    景中java程序的定时任务),最好在程序脚本中将用到的环境变量重新export下
  平时工作中尽量多用crontab -e 和crontab -l 去编辑和查看定时任务,因为会有语法检查
  如果给1000台服务器同时添加系统时间同步,可以使用分发工具或者批量运维脚本(脚本内容就是echo”脚本任务规则”>>/var/spool/cron/root)
  4. 定时任务结尾加>/dev/null 2>&1 如果追加指定日志文件里,就不要和/dev/null同时存在
  /dev/null  定符设备,黑洞设备       2>&1指定是标准错误和标准输出一样  整个意思是把脚本的正常和错误输出都重定向到/dev/null.即不记录任何输出
  如果定时任务结尾不加>/dev/null 2>&1  很容易导致硬盘inode空间被占满,从而系统服务不正常
  5.生产任务程序不要随意打印输出信息,
  如:打包时去掉-v 不必要的输出就不要输出,如果一定要输出,也可以指定日志文件
[iyunv@localhost /]# tar zcf etc.tar.gz /etc >&/dev/null       #输出到黑洞设备

[iyunv@localhost /]# tar zcvf etc.tar.gz /etc >&/tmp/tar.log   #输出指定日志文件

  6.定时任务命令或程序最好写到脚本里执行
  如:* * * * * echo "huanweixiong-->>  $(date +\%F" "\%T)" >>/service/log/huangweixiong
  提示:在任务中,%前面一定要加转义\
  如果不用转义,可以用另一种方法:
  用脚本的方式:
[iyunv@localhost ~]# mkdir /server/scripts -p

[iyunv@localhost ~]# cd /server/scripts/

[iyunv@localhost scripts]# vi echo.sh

  输入: echo "mrxiong-->>  $(date +%F" "%T)" >>/service/log/mrxiong.log
[iyunv@localhost scripts]# crontab –e

  加入
  #pring a name by mrxiong
  * * * * * /bin/sh /server/scripts/echo.sh >/dev/null 2>&1
  7.定时任务路径要用绝对路径,绝对路径就是从根开始的完整路径,当然也要确保路径对应的目录要存在才行,日志文件可以不存在

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-449076-1-1.html 上篇帖子: CentOS 6 配置静态IP及路由 下篇帖子: 详解CentOS通过日志反查入侵
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表